2012-08-06 4 views
1
내가 routes.php에 다음 코드가 한

를 호출. 그러나 abc (슬러그)을 제거하면 CakePHP는 액션 123 (동작이 아닌 ID 임)에 액세스하려고 시도합니다. 나는 2.2.1 (예, 아주 오래된) 1.2에서 업그레이드하기 전에 무엇을했다이었다 /c/details/:id/:slug/:action/*를 사용하고 잘 작동 된 경우은 CakePHP의 사용자 정의 경로가 잘못된 행동

Error: The action 123 is not defined in controller CarsController 

는, CakePHP의도 내가 슬러그가 있는지 여부를 행동 123에 액세스하려고하거나 아니.

CakePHP를 업그레이드하기 전에 항상 슬러그가없는 URL과 컨트롤러에있는 코드로 URL에 슬러그가없는 경우 올바른 URL로 리디렉션됩니다.

편집 : 방금 ​​확인했는데 슬러그를 제공하지 않으면 모든 것이 바뀌 었습니다. c이 무시되면 details이 컨트롤러가되고 123이 작업이됩니다.

[request] => CakeRequest Object 
    (
     [params] => Array 
      (
       [plugin] => 
       [controller] => details 
       [action] => 123 
       [named] => Array() 
       [pass] => Array() 
       [isAjax] => 
      ) 

올바른가 될 때, 나는 슬러그와 함께 제공하는 경우 내가 무엇을 얻을이다 : 지금이 문제를 일으킬 수있는 어떤

[request] => CakeRequest Object 
    (
     [params] => Array 
      (
       [plugin] => 
       [controller] => cars 
       [action] => index 
       [named] => Array() 
       [pass] => Array 
        (
         [0] => 123 
         [1] => abc 
        ) 

       [id] => 123 
       [slug] => abc 
       [isAjax] => 
      ) 

어떤 생각을?

답변

2

슬러그를 선택 사항으로 지정하려면 2 경로가 필요할 수 있습니다 (확실하지 않음). 어쨌든 action 키를 각 경로에 추가하십시오.

Router::connect('/c/details/:id', 
    array('controller' => 'cars', 'action' => 'details'), 
    array('pass' => array('id')) 
); 

Router::connect('/c/details/:id/:slug', 
    array('controller' => 'cars', 'action' => 'details'), 
    array('pass' => array('id', 'slug')) 
); 
+0

효과가 있습니다. 이상한 것은 오래된 케이크 버전으로 한 경로만으로 충분했기 때문입니다. 감사. – rlcabral

관련 문제