我创建了一条与此类似的路线:
Router::connect("/backend/:controller/:action/*");
现在我想将符合此模式的每个控制器路由到重命名为backend_:controller。
以某种方式:
Router::connect("/backend/:controller/:action/*", array('controller' => 'backend_:controller'));
示例:如果调用URL www.example.com/backend/settings/myaction,它将路由到控制器“backend_settings”并调用“myaction”操作!
但另一方面,如果有人打电话给www.example.com/settings,它会路由到控制器“设置”。
URL应该保持调用方式,cakePHP应该只使用修改后的控制器名称!
我希望有人能指出我应该用于此问题的最佳解决方案。提前谢谢!
答案 0 :(得分:5)
您可以在指定路线时使用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;
}
}
以下是如何使用它:
// inside routes.php file in app/Config/
App::uses('ControllerPrefixRoute', 'Routing/Route');
Router::connect("/:controller_prefix/:controller/:action/*", array(), array('routeClass' => 'ControllerPrefixRoute'));
因此,此网址/backend/settings/myaction
将调用BackendSettingsController::myaction
答案 1 :(得分:1)
也许您需要的是路由器前缀。
转到core.php并添加以下行:
Configure::write('Routing.prefixes', array('backend'));
并且全部......你不需要添加路由..所以现在www.example.com/backend/settings/add
将在设置控制器中查找名为backend_add()
的方法
www.example.com/settings/add
将在设置控制器中调用名为add()
的方法
here你会找到更好的例子=)
希望这会有所帮助