我正在尝试将 cakephp 2.x 转换为 3.x.我正在使用 Router::connect() 规则,但我尝试将它们转换为范围版本.
I'm trying to convert cakephp 2.x to 3.x. I was using Router::connect() rules, but I try to convert them to scope version.
关于 myold 路由规则,在 config/routes.php 中我添加了这个.
Regarding to myold routing rule, in config/routes.php I added this.
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.
example.com/en/works. I get this error: Error: worksController could not be found. Because my controller file is WorksController.php.控制器名称部分是否挂在句子 casein cakephp 3 上?http://book.cakephp.org/3.0/en/intro/conventions.html#控制器约定
Does controller name part hanged to sentence 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 是动作.example.com/foo/bar gives this error: Error: barController could not be found.. But foo is controller and bar is action.我该如何解决这个路由问题?
How can I fix this routing problem ?
将 Route::defaultRouteClass('Route') 更改为 Route::defaultRouteClass('InflectedRoute') 解决了问题 1.但问题 2 存在.
Changing Route::defaultRouteClass('Route') to Route::defaultRouteClass('InflectedRoute') solved problem 1. But problem 2 exists.
选项,例如路由元素模式,必须通过 Router::connect() 的第三个参数传递,>$options 参数.
Options, such as route element patterns, must be passed via the third argument of Router::connect(), the $options argument.
这条路线:
$routes->connect(
'/:language/:controller',
['action' => 'index', 'language' => 'ar|de|en|fr'
]);
将捕获您的 /foo/bar URL,它将匹配 foo 的 :language 元素,以及 bar:controller 元素的代码>.基本上,URL 数组中的 language 键将被视为默认值,并且它始终会被 :language 元素值覆盖.
will catch your /foo/bar URL, it will match foo for the :language element, and bar for the :controller element. Basically the language key in the URL array will be treated as the default value, and it will always be overwritten by the :language element value.
定义路由的正确方式是:
The correct way of defining the route is:
$routes->connect(
'/:language/:controller',
['action' => 'index'],
['language' => 'ar|de|en|fr']
);
其他路线需要相应调整.
The other routes need to be adapted accordingly.
另见Cookbook > Routing > Connecting Routes
See also Cookbook > Routing > Connecting Routes
这篇关于Cakephp 3 路由与语言参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
不能使用 'Object 作为类名,因为它是保留的Cannot use #39;Object as class name as it is reserved Cake 2.2.x(不能使用 Object 作为类名,因为它是保留的 Cake 2.2.x)
OAuth 重定向后会话丢失Session is lost after an OAuth redirect(OAuth 重定向后会话丢失)
Cakephp 3.x 中的分页排序Pagination Sort in Cakephp 3.x(Cakephp 3.x 中的分页排序)
CakePHP 多个应用程序的共享核心CakePHP Shared core for multiple apps(CakePHP 多个应用程序的共享核心)
在 CakePHP 3 上登录 [ Auth->identify() ] 始终为 falLogin [ Auth-gt;identify() ] always false on CakePHP 3(在 CakePHP 3 上登录 [ Auth-identify() ] 始终为 false)
致命错误:允许的内存大小为 134217728 字节已用尽Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes)(致命错误:允许的内存大小为 134217728 字节已用尽