2010-12-18 2 views
7

저는 cakephp에 상당히 익숙하지만 URL과 매개 변수와 관련된 질문이 있습니다.CakePHP, GET 매개 변수 및 라우팅

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

내가 실현 다음과 같이 내 컨트롤러 액션에 매핑 해당 URL을하고 싶은

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

: 나는 표준 URL의 예처럼 보이는 URL을 가질 수 있도록하고 싶습니다 cakephp는 here으로 설명 된 것처럼 라우팅하지만 정직하게 말하자면 이것은 비공식적 인 url 문자열을 처리하고 결과를 얻은 것 같습니다.

내 현재 상황에 따라 URL은 생성되지 않으며 케이크에 대해 아무것도 모르고 케이크 URL 형식을 지원하지 않는 외부 (결제) 시스템에 의해 호출됩니다.

답변

11

어떤 형태로든 URL을 사용할 수 있습니다. 그냥 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 감사 FO r 써니 도움! – Introgy

+1

당신은 'isset'이라고 말하는 것을 의미 했습니까? is_set은 PHP 함수가 아닙니다. –

0

에서 GET을 통해 전달 된 변수를 검색 할 수 있습니다. 외부 시스템이 있기 때문에가 아니라 모든 매개 변수를 URL 경로에 넣는 것을 원하지 않기 때문입니다. 필자의 예에서는 몇 가지 검색 쿼리를 조합하여 컨트롤러에 전달했습니다. IMHO, 이러한 쿼리는 GET 매개 변수 여야하며 URL 경로의 일부가 아니어야합니다.

GET 매개 변수를 사용하는 한 가지 이점은 URL 경로를 통해 매개 변수를 전달하는 것과 달리 지정된 매개 변수의 순서가 중요하지 않다는 것입니다.

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

은 지금이 액세스 할 수 있습니다

는 같은 이름의 하나가 주어진다면 내가는 GET-PARAM의 값으로 모든 메소드 인수를 대체하고있어, 일반적인 방법으로이 문제를 해결하려면 제어기 방법과 같이 GET 통해 파라미터를 전달한다 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'); 
     } 
    } 
... 
}