【发布时间】:2015-09-30 15:33:54
【问题描述】:
我正在尝试将 cakephp 2.x 转换为 3.x。我正在使用Router::connect() 规则,但我尝试将它们转换为范围版本。
关于myold的路由规则,我在config/routes.php添加了这个。
Router::defaultRouteClass('Route');
Router::scope('/', function ($routes) {
$routes->connect('/:language/:controller/:action/*', ['language' => 'ar|de|en|fr']);
$routes->connect('/:language/:controller', ['action' => 'index', 'language' => 'ar|de|en|fr']);
$routes->connect('/:language', ['controller' => 'Mydefault', 'action' => 'index', 'language' => 'ar|de|en|fr']);
$routes->redirect('/gohere/*', ['controller' => 'Mycontroller', 'action' => 'myaction'], ['persist' => array('username')]);
$routes->connect('/', ['controller' => 'Mydefault', 'action' => 'index']);
$routes->fallbacks('InflectedRoute');
});
- 但这在
example.com/en/works中失败了。我收到此错误:Error: worksController could not be found.因为我的控制器文件是WorksController.php。
控制器名称部分是否挂在句子 casein cakephp 3 上? http://book.cakephp.org/3.0/en/intro/conventions.html#controller-conventions
- 同样
example.com/foo/bar给出此错误:Error: barController could not be found.。但是foo是控制器,bar是操作。
如何解决这个路由问题?
编辑:
将Route::defaultRouteClass('Route') 更改为Route::defaultRouteClass('InflectedRoute') 解决了问题1。但问题2 存在。
【问题讨论】:
-
您的 routes.php 顶部必须有一行
Route::defaultRouteClass('Route')。将其更改为Route::defaultRouteClass('InflectedRoute')。 -
此修复错误1。但错误2存在。当我输入
example.com/foo/bar时,cakephp 会查找 barController。
标签: php cakephp routing cakephp-3.0