Cakephp 插件路由到带前缀的控制器

Cakephp 插件路由到带前缀的控制器,cakephp,plugins,controller,routing,naming,Cakephp,Plugins,Controller,Routing,Naming,我正在为我的应用程序(使用CakePHP 2.6.0)创建一个插件,允许用户使用与管理区域相同的模型登录到用户区域,因此我尝试获得与管理区域相同类型的URI方案,例如/admin/users/login,但对于/special/users/login。我在插件的Config/routes.php中有以下路径,并在“Routing.prefixes”配置中添加了“special”前缀: Router::connect('/special/:controller/:action', array(

我正在为我的应用程序(使用CakePHP 2.6.0)创建一个插件,允许用户使用与管理区域相同的模型登录到用户区域,因此我尝试获得与管理区域相同类型的URI方案,例如
/admin/users/login
,但对于
/special/users/login
。我在插件的Config/routes.php中有以下路径,并在“Routing.prefixes”配置中添加了“special”前缀:

Router::connect('/special/:controller/:action', array(
    'special' => true,
    'prefix' => 'special',
    'plugin' => 'Special',
    'controller' => ':controller',
    'action' => ':action',
));
通过以上路径并输入以下url
/special/users/login
,如果Cake选择了
Plugin/Controller/SpecialUsersController.php
(考虑到名称空间与主应用程序的UsersController冲突),那么现在对我来说是有意义的但是我得到了一个错误:创建类userscoontroller


是否有一种内置的方式可以让它基于插件加载一个带前缀的控制器(而不改变url)?还是有更好的方法来灵活地扩展我的主应用程序?我这样做是错误的吗?

我找不到一个内置的方式让它按我想要的方式工作,所以我在我的应用程序的
路由/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是另一回事

也许其他人使用过这个,或者知道更好的解决方案