Den*_*nis 3 controller routes cakephp renaming
我创建了一个类似于这个的路线:
Router::connect("/backend/:controller/:action/*");
Run Code Online (Sandbox Code Playgroud)
现在我想将符合此模式的每个控制器路由到重命名为backend_:controller.
不知何故这样:
Router::connect("/backend/:controller/:action/*", array('controller' => 'backend_:controller'));
Run Code Online (Sandbox Code Playgroud)
示例:如果调用URL www.example.com/backend/settings/myaction,它将路由到控制器"backend_settings"并调用"myaction"操作!
但另一方面,如果有人打电话给www.example.com/settings,它会路由到控制器"设置".
URL应该保持调用方式,cakePHP应该只使用修改后的控制器名称!
我希望有人能指出我应该用于解决这个问题的最佳解决方案.提前致谢!
您可以routeClass在指定路线时使用该属性,并使用自定义路线类.
这是我执行的CakeRoute类,它完全按照您的描述执行(将控制器前缀附加到控制器):
// 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;
}
}
Run Code Online (Sandbox Code Playgroud)
以下是如何使用它:
// inside routes.php file in app/Config/
App::uses('ControllerPrefixRoute', 'Routing/Route');
Router::connect("/:controller_prefix/:controller/:action/*", array(), array('routeClass' => 'ControllerPrefixRoute'));
Run Code Online (Sandbox Code Playgroud)
所以这个网址/backend/settings/myaction会调用BackendSettingsController::myaction