2015-01-07 99 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', 
)); 

通过以上路径,然后输入以下网址/special/users/login它将使意义我现在如果蛋糕去Plugin/Controller/SpecialUsersController.php(考虑命名空间与主应用程序的UsersController冲突),但我得到一个错误Error: Create the class UsersController

是否有内置的方式来加载基于插件的前缀控制器(不更改url)?还是有更好的方法来整洁地扩展我的主应用程序?我是否以这种错误的方式去做?

回答

0

我找不到它,因为我想,所以我改变了我的应用程序的Routing/Route/文件夹中使用自定义的路由类URL字符串被解析的方式工作内置方式:

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' 
)); 

这导致/special/users/login创造我想要Plugin/Controller/SpecialUsersController.php,无副作用到目前为止控制器。尽管扩展主应用程序的UsersController是一个不同的故事。

也许别人有使用这个或知道更好的解决方案?