2010-12-18 12 views
7

मैं केकफ़्पी के लिए बिल्कुल नया हूं लेकिन मेरे पास यूआरएल और पैरामीटर से संबंधित एक प्रश्न है।केकेपीएचपी, पैरामीटर और रूटिंग प्राप्त करें

http://www.mysite.com/controller/myaction?arg=value&arg2=val 

मुझे लगता है कि यूआरएल चाहते हैं मेरी नियंत्रक में किसी कार्रवाई से मैप करने के लिए इस प्रकार है::

function myaction($arg = null, $arg2 = null) 
{ 
    // do work 
} 

मुझे पता है मैं एक यूआरएल है कि एक मानक यूआरएल जैसे की तरह लग रहा है करने के लिए सक्षम होने के लिए चाहते हैं कि केकफ़्पी ने here वर्णित के रूप में रूटिंग किया है, हालांकि, ईमानदारी से यह इंजीनियर पर लगता है और परिणामस्वरूप एक यूआरएल स्ट्रिंग जो गैर मानक है।

मेरी वर्तमान स्थिति में यूआरएल उत्पन्न किया जा रहा है और बाहरी (बिलिंग) प्रणाली द्वारा आह्वान किया जा रहा है जो केक के बारे में कुछ नहीं जानता और केक यूआरएल प्रारूप का समर्थन नहीं करता है।

उत्तर

11

आप अपना यूआरएल किसी भी रूप में प्राप्त कर सकते हैं। यह सिर्फ CakePHP आप चर $this->params['url']

function myaction() 
{ 
    if(isset($this->params['url']['arg'])) 
    $arg = $this->params['url']['arg']; 
    if(isset($this->params['url']['arg2'])) 
    $arg2 = $this->params['url']['arg2']; 
} 
+0

+1 धन्यवाद के लिए आपकी मदद धूप में! – Introgy

+1

आप 'जारीकर्ता' कहना चाहते थे, है ना? is_set एक php फ़ंक्शन नहीं है। –

0

मैं एक ऐसी ही समस्या है से चर प्राप्त के माध्यम से पारित पुनः प्राप्त करने की अनुमति देता है है। ऐसा नहीं है क्योंकि मेरे पास बाहरी सिस्टम है, लेकिन क्योंकि मैं सभी पैरामीटर को यूआरएल-पथ में रखना पसंद नहीं करता हूं। मेरे उदाहरण में, मेरे पास कुछ खोज प्रश्न हैं जो इकट्ठे हुए हैं और नियंत्रक को पास कर दिए गए हैं। आईएमएचओ, इन प्रश्नों को पैरामीटर प्राप्त करना चाहिए और यूआरएल-पथ का हिस्सा नहीं होना चाहिए।

जीईटी पैरामीटर का उपयोग करने का एक फायदा यह है कि यूआरएल पथ के माध्यम से पारित पैराम के विपरीत दिए गए पैरामीटर का क्रम महत्वपूर्ण नहीं है।

एक सामान्य तरीके से इस समस्या को हल करने के लिए, मैं, Get-परम के मूल्य के साथ सभी विधि तर्क की जगह कर रहा हूँ अगर एक ही नाम के साथ एक दिया जाता है:

class MyController extends AppController 
{ 
    function test($var1 = null, $var2 = "content2") 
    { 
     foreach (get_defined_vars() as $key => $value) { 
      if (isset($this->params['url'][$key])) { 
       $getvalue = $this->params['url'][$key]; 
       $$key = $getvalue; 
       CakeLog::write("debug", "Setting:$key to $getvalue"); 
      } 
     } 
     CakeLog::write("debug", print_r(get_defined_vars(), true)); 
    } 
} 

अब मैं इस का उपयोग कर सकते नियंत्रक विधि और इस तरह प्राप्त के माध्यम से पैरामीटर भेजने: CakePHP 2.x के लिए AppController में

http://myapp/mycontroller/test?var1=foo&var2=bar 
1

समाधान

class AppController extends Controller { 

.... 

/*** 
    * Recupera los Named envias por URL 
    * si es null $key emtraga el array completo de named 
    * 
    * @param String $key 
    * 
    * @return mixed 
    */ 
    protected function getNamed($key=null){ 
     // Is null..? 
     if(is_string($key)==true){ 
      // get key in array 
      return Hash::get($this->request->param('named'), $key); 
     }else{ 
      // all key in array 
      return $this->request->param('named'); 
     } 
    } 
... 
} 
संबंधित मुद्दे