我在routes.php
中有以下代码:
Router::connect('/c/details/:id/:slug',
array('controller' => 'cars'),
array('pass' => array('id', 'slug'))
);
如果我尝试访问http://domain.com/c/details/123/abc
,它就有效。但是,如果我删除abc
(即slug),CakePHP会尝试访问操作123
(这是id,而不是操作)。
Error: The action 123 is not defined in controller CarsController
如果我使用/c/details/:id/:slug/:action/*
,这是我从1.2升级之前(是的,很老)到2.2.1并且它工作正常,CakePHP也尝试访问操作123
是否我是否有一个slu。。
没有slugs的URL在升级CakePHP之前总是有效,并且在控制器中有我的代码,如果URL中没有slug,它会重定向到正确的URL。
编辑:我刚检查过,似乎当我没有提供slug时,整个事情都发生了变化。 c
被忽略,details
成为控制者,123
成为行动。
[request] => CakeRequest Object
(
[params] => Array
(
[plugin] =>
[controller] => details
[action] => 123
[named] => Array()
[pass] => Array()
[isAjax] =>
)
当正确的时候,如果我提供了一个slug,那就是我得到的:
[request] => CakeRequest Object
(
[params] => Array
(
[plugin] =>
[controller] => cars
[action] => index
[named] => Array()
[pass] => Array
(
[0] => 123
[1] => abc
)
[id] => 123
[slug] => abc
[isAjax] =>
)
现在知道可能导致此问题的原因是什么?
答案 0 :(得分:2)
如果您希望slug是可选的(不确定),您可能需要2条路线。无论如何,也要在每条路线上添加action
密钥。
Router::connect('/c/details/:id',
array('controller' => 'cars', 'action' => 'details'),
array('pass' => array('id'))
);
Router::connect('/c/details/:id/:slug',
array('controller' => 'cars', 'action' => 'details'),
array('pass' => array('id', 'slug'))
);