2010-12-18 31 views
7

yönlendirme Ben CakePHP'de için oldukça yeni ama URL'ler ve parametreler ile ilgili bir sorum var.CakePHP, Parametreler GET ve

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

ben fark şu şekildedir: benim denetleyicisi bir eyleme eşleştirmek için bu url istiyorum

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

: Ben standart url ör benzeyen bir url var edebilmek istiyorum here açıklandığı gibi bu CakePHP'de yönlendirme etti, ancak, dürüstçe bu standart olmayan bir uRL dizesinde mühendislik ve sonuçları üzerinde görünüyor. Benim Mevcut durumda

url oluşturulur ve pasta hakkında hiçbir şey bilmeyen ve kek url formatını desteklemeyen harici (faturalandırma) sistem tarafından çağrılan ediliyor.

cevap

11

herhangi forma URL'ye sahip olabilir. Sadece CakePHP ben benzer bir sorun var değişken $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 Teşekkür fo yardımın güneşli! – Introgy

+1

'Isset' demek istediniz, değil mi? is_set bir php işlevi değil. –

0

gelen GET geçirilen değişkeni almak için izin verir ediyor. Harici bir sistemim olduğu için değil, tüm parametreleri URL yoluna koymak istemediğim için. Örneğimde, denetleyiciye toplanan ve iletilen bazı arama sorgularım var. IMHO, bu sorgular GET parametreleri olmalı ve URL yolunun bir parçası olmamalıdır. GET parametrelerini kullanmanın

bir avantajı verilen parametrelerin sırası URL yolu üzerinden params geçen aksine, önemli olmadığıdır.

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)); 
    } 
} 

Şimdi bu erişebilirsiniz:

aynı isimde biri verilirse ben, GET-param değeriyle tüm yöntem argümanlar yerine gidiyorum, genel bir şekilde bu sorunu çözmek için kontrolör yöntemi ve bunun gibi GET yoluyla parametrelerini geçirmek: CakePHP'nin 2.x için AppController içinde

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

Çözüm

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'); 
     } 
    } 
... 
}