2012-06-07 2 views
0

틀린 매개 변수로 올바른 기본 URL을 처리하려면 어떻게해야합니까?cakephp가 잘못된 매개 변수를 URL에 전달하는 경우

Cakephp 잘못된 컨트롤러 또는 동작 이름을 전달하면 404 페이지로 연결됩니다. 하지만 잘못된 매개 변수와 함께 올바른 컨트롤러/작업 이름을 입력하면 어떻게 이런 종류의 문제를 해결할 수 있습니다.

예 :

올바른 : http://localhost/controller/action?params=123 잘못된 : http://localhost/controller/action?par23=123

par23는 잘못된 이름입니다. 이 경우 404 페이지와 같은 일부 페이지로 리디렉션하고 싶습니다. 컨트롤러의 매개 변수를 확인하고 매번 일부 페이지로 리디렉션 할 필요가없는 메소드 또는 구성이 있습니까?

감사합니다.

+0

Cake의'/ controller/action/param1/param2' 형식이나 명명 된 param 방식'/ controller/action/name1 : value1/name2 : value2'의 형식이 아닌 이유는 무엇입니까? – pixelistik

+0

특별한 이유가 없습니다. 개인 취향 – EeE

답변

0

컨트롤러에서 수동으로 확인해야합니다. 당신의 필요 PARAMS가있는 경우 대신 여분의 잘못 PARAM을 찾는

, 나는 단순히 확인합니다. 그렇지 않은 경우 예외를 throw 할 수 있습니다.

이 케이크의 구운 코드가 그것을 수행하는 방법입니다

// MyModelController.php 
public function view($id = null) { 
     $this->MyModel->id = $id; 
     if (!$this->MyModel->exists()) { 
      throw new NotFoundException(__('Invalid thing')); 
     } 

     // ... 
} 

그래서 여기에 ID가 필요합니다. 지정되지 않으면 (기본값은 null)이 ID가있는 레코드가 없으면 404가되는 예외가 발생합니다.

추가 이점이 있습니다. param이없는 경우를 다루는 것이 아니라 param이 있지만 존재하지 않는 항목을 $id으로 참조하면 올바르게 오류를 반환합니다.

+0

좋은 지적. 그래서 구성으로이 작업을 수행하는 다른 방법은 없습니까? – EeE

+0

귀하의 요청과 일치하는 경로가 없을 경우 Cake에서 404를 제공합니다. 그러나 매개 변수가 있는지뿐만 아니라 참조 된 항목이 있는지도 확인해야합니다. 이것은 위의 코드가하는 것입니다. 모든 모델에 대해 비슷한 매개 변수를 사용한다면 AppController에서 좀 더 일반적인 방법으로 이것을 구현할 수 있습니다. – pixelistik

관련 문제