2011-12-23 2 views
3

내가이 하나의 아날로그 인 경로를 만들어 이름 : 제어 장치. 어떻게 든 그런CakePHP의 경로는 컨트롤러의 이름을 수정/가져 오는 컨트롤러는

:

Router::connect("/backend/:controller/:action/*", array('controller' => 'backend_:controller')); 

예 : URL의 www.example.com/backend/settings/myaction가 호출되면, 그것은 "backend_settings"컨트롤러 노선 것 및 작업 "시켜라"를 호출 !

그러나 다른 한편으로 www.example.com/settings가 호출되면 컨트롤러 "설정"으로 라우팅됩니다.

URL은 그것이 불려지는 방식으로 유지되어야하는데, cakePHP는 수정 된 컨트롤러 이름 만 사용해야합니다!

나는 누군가가 내가이 문제에 사용할 최선의 해결책을 가르쳐주기를 바랍니다. 미리 감사드립니다!

답변

1

아마도 라우터 프리픽스가 필요합니다. 그래서 지금 www.example.com/backend/settings/add가에 backend_add()라는 방법을 찾을 것이다 .. 당신이 경로를 추가 할 필요가 없습니다 ...

Configure::write('Routing.prefixes', array('backend')); 

하고 그게 다야 :

는 core.php에 가서이 줄을 추가 설정 컨트롤러

그리고 www.example.com/settings/add

) = 당신은 더 나은 예를 찾을 수 있습니다

here 설정 컨트롤러 add()라는 메소드를 호출

희망 하시겠습니까?

+0

답장을 보내 주셔서 감사합니다. 나는 이미 접두사를 알고있다. 불행히도 프론트 엔드 컨트롤러에서 백엔드 컨트롤러를 분리하기 때문에 원하는 것은 아닙니다. 접두사를 사용하여 백엔드와 프론트 엔드 방법을 혼합합니다. 여기서 문제는 내 백엔드 "메인"컨트롤러가 인증을 지원하고 백엔드를 다루는 모든 컨트롤러가이 메인 컨트롤러 및 특히 인증으로부터 상속된다는 것입니다. 프론트 엔드 컨트롤러는 인증을 전혀 처리하지 않아야합니다. 그래서 내가 그들을 분리하고 싶다! – Dennis

+0

그것은 컨트롤러에 대한 모든 규칙을 작성해야 할 필요가 있다고 생각합니다. 아마도 여러분은 백엔드 URL을 라우팅하기 위해 자신의 클래스를 사용할 수 있습니다. http://book.cakephp.org/2.0/en/development /routing.html?highlight=routing#custom-route-classes – pleasedontbelong

5

경로를 지정할 때 routeClass 속성을 사용할 수 있으며 맞춤 경로 클래스를 사용할 수 있습니다.

// ControllerPrefixRoute.php file in app/Routing/Route/ 

App::uses('CakeRoute', 'Routing/Route'); 

class ControllerPrefixRoute extends CakeRoute { 

    /** 
    * Parses a string url into an array. If a controller_prefix key is found it will be appended to the 
    * controller parameter 
    * 
    * @param string $url The url to parse 
    * @return mixed false on failure, or an array of request parameters 
    */ 
    public function parse($url) { 

     $params = parent::parse($url); 

     if (!$params) { 
      return false; 
     } 
     $params['controller'] = $params['controller_prefix'].'_'.$params['controller']; 
     return $params; 
    } 

} 

을 그리고 여기에 그것을 사용하는 방법은 다음과 같습니다 :

당신이 설명을 정확하게 수행하는 CakeRoute 클래스의 내 구현 (컨트롤러에 컨트롤러 접두사를 추가)

// inside routes.php file in app/Config/ 

App::uses('ControllerPrefixRoute', 'Routing/Route'); 

Router::connect("/:controller_prefix/:controller/:action/*", array(), array('routeClass' => 'ControllerPrefixRoute')); 

따라서이 URL은 /backend/settings/myaction이 호출됩니다. BackendSettingsController::myaction