2015-01-07 13 views
0

사용자가 관리 영역과 동일한 모델을 사용하여 사용자 영역에 로그인 할 수있게 해주는 (CakePHP 2.6.0을 사용하는) 응용 프로그램 용 플러그인을 만들고 있습니다. 관리 영역과 동일한 유형의 URI 스킴을 얻는다. /admin/users/login을 입력 한 다음 /special/users/login을 입력하십시오. 내 플러그인의 구성/routes.php에서 다음과 같은 경로를 가지고 있고 'Routing.prefixes'구성에 '특별한'접두사를 추가 :접두사가 붙은 컨트롤러에 대한 플러그인 경로

Router::connect('/special/:controller/:action', array(
    'special' => true, 
    'prefix' => 'special', 
    'plugin' => 'Special', 
    'controller' => ':controller', 
    'action' => ':action', 
)); 

위의 노선과는 이해가 것 다음 URL /special/users/login를 입력으로 나 지금 케이크가 Plugin/Controller/SpecialUsersController.php (주 응용 프로그램의 UsersController와의 네임 스페이스 충돌을 고려한 경우) 대신에 Error: Create the class UsersController 오류가 발생하면

플러그인을 기반으로 (URL을 변경하지 않고) 접두사가 붙은 컨트롤러를로드 할 수있는 기본 제공 방법이 있습니까? 아니면 주 응용 프로그램을 깔끔하게 확장 할 수있는 더 좋은 방법이 있습니까? 내가 잘못된 방향으로가는거야?

내가 내가 내가 URL 문자열 내 응용 프로그램의 Routing/Route/ 폴더에서 사용자 지정 경로 클래스를 사용하여 구문 분석하는 방식을 변경하기 원하는대로 작동 할 수있는 기본 방법을 찾을 수 없습니다

답변

0

:

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

/** 
* Plugin route will make sure plugin routes get 
* redirected to a prefixed controller. 
*/ 
class PluginRoute extends CakeRoute { 

    /** 
    * Parses a string URL into an array. 
    * 
    * @param string $url The URL to parse 
    * @return bool False on failure 
    */ 
    public function parse($url) { 
     $params = parent::parse($url); 

     if($params && !empty($params['controller']) && !empty($params['plugin'])) { 
      $params['controller'] = $params['plugin'] . ucfirst($params['controller']); 
     } 

     return $params; 
    } 

} 

그리고 다음을 나의 플러그인 경로를 설정 :

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

Router::connect('/special/:controller/:action', array(
    'special' => true, 
    'prefix' => 'special', 
    'plugin' => 'Special', 
    'controller' => ':controller', 
    'action' => ':action', 
), array(
    'routeClass' => 'PluginRoute' 
)); 

이 내가 Plugin/Controller/SpecialUsersController.php, 부작용까지 원하는 컨트롤러를 만드는 /special/users/login 결과. 메인 애플리케이션의 UsersController를 확장하는 것은 다른 이야기입니다.

누군가 다른 사람이 이것을 사용하거나 더 나은 해결책을 알고 있을까요?