2010-12-18 19 views
7

Jestem całkiem nowym użytkownikiem cakephp, ale mam pytanie dotyczące adresów URL i parametrów. Chciałbym móc mieć adres URL, który wygląda jak standardowy url npCakePHP, GET Parametry i routing

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

chciałbym ten link do mapy do działania w moim kontroler następująco:

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

Zdaję sobie sprawę, to cakephp ma routing zgodnie z opisem here, jednak, szczerze mówiąc, wygląda na to, że jest on nadinterpretowany i powoduje, że ciąg adresów URL jest niestandardowy.

W mojej obecnej sytuacji adres URL jest generowany i wywoływany przez system zewnętrzny (fakturowanie), który nie zna się na ciastku i nie obsługuje formatu adresu URL ciast.

Odpowiedz

11

Możesz mieć swój adres URL w dowolnej formie. To właśnie CakePHP pozwala odzyskać zmienną przeszedł przez GET ze zmiennej $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 Dzięki fo r twoja pomoc słonecznie! – Introgy

+1

Chciałeś powiedzieć "isset", prawda? is_set nie jest funkcją php. –

0

mam podobny problem. Nie dlatego, że mam system zewnętrzny, ale dlatego, że nie lubię umieszczać wszystkich parametrów w ścieżce URL. W moim przykładzie mam kilka zapytań, które są składane i przekazywane do kontrolera. IMHO, te zapytania powinny być parametrami GET, a nie częścią ścieżki URL.

Zaletą korzystania z parametrów GET jest to, że kolejność podanych parametrów nie jest ważna, w przeciwieństwie do przekazywania parametrów przez ścieżkę URL.

Aby rozwiązać ten problem w sposób ogólny, jestem zastępując wszystkie argumenty metody z wartości GET-param, jeśli ktoś o tej samej nazwie jest podany:

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

Teraz mogę uzyskać dostęp do tego metoda kontroler i przekazać parametry poprzez GET tak:

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

rozwiązaniem w AppController dla CakePHP 2.x

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