2013-10-03 2 views
1

단지 하나의 행동. 그러나 domain.api/*의 모든 경로를 'api'접두어없이 해당 URL로 리 라우팅하려고합니다.CakePHP의 접두사 라우팅

예컨대 : 그것은 정의 된 규칙을 잘 작동

Router::connect('/api', array('controller'=>'index', 'action'=>'index')); 
Router::connect('/api/:controller', array('action'=>'index')); 
Router::connect('/api/:controller/:action'); 
Router::connect('/api/:controller/:action.:ext'); 

:

domain.com/api/controller    -> domain.com/controller 
domain.com/api/controller/action  -> domain.com/controller/action 
domain.com/api/controller/action/param -> domain.com/controller/action/param 
domain.com/api/controller/action?key=val -> domain.com/controller/action?key=val 

나는 routes.php에 다음을 추가했습니다. 그러나 나는 모든 시나리오를 다루는 것 같지 않습니다. URL 매개 변수 또는 플러그인 및 기타 고급 URL을 사용하면 실패합니다.

내가 원하는 작업을 수행하는 더 쉬운 방법이 있습니까?

+0

_ "원하는 작업을 수행하는 더 쉬운 방법이 있습니까?"_ 예, mod 재 작성이라고합니다. – Rob

+0

당신은 mod_rewrite가 필요하지 않습니다. 케이크는 라우팅 시스템이 모든 것을 처리합니다. 와일드 카드와 자리 표시자를 사용할 수 있습니다. 내 대답은 아래를 참조하십시오. – Happy

+0

필요 여부에 관계없이 mod 재 작성은 여전히이 상황을 처리하는보다 효율적이고 효율적인 방법입니다. 그냥 선생님 ... – Rob

답변

0

CakePHP의 라우팅 시스템에서 와일드 카드 (*)를 사용할 수 있으므로 4 가지 규칙은 필요하지 않습니다.

그래서 응용 프로그램에서/구성 /는 routes.php http://domain.com/mycontroller/someaction에 끝날 것입니다, 당신이 원하는 모든 것을 다룰 것 단 하나의 규칙 .. 그런

Router::connect('/api/:action/*', array('controller' => 'mycontroller')); 

, http://domain.com/api/someaction처럼 모든 요청을 추가합니다.

내 코드 예제에서 변경해야하는 유일한 것은 컨트롤러의 이름입니다. mycontroller이 위에 명시되어 있습니다.

: 당신이보고 행동 부분은 기본적으로 모든 요청에 ​​지정된 작업을하고 *이 와일드 카드에 대한 자리 표시 자입니다.