Cakephp 插件路由到带前缀的控制器
我正在为我的应用程序(使用CakePHP 2.6.0)创建一个插件,允许用户使用与管理区域相同的模型登录到用户区域,因此我尝试获得与管理区域相同类型的URI方案,例如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(
/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是另一回事
也许其他人使用过这个,或者知道更好的解决方案