我有以下代码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
,无论我是否有 slug。
没有 slug 的 URL 在升级 CakePHP 之前总是有效的,并且使用我在控制器中的代码,如果 URL 中没有 slug,它将重定向到正确的 URL。
编辑:我刚刚检查了一下,似乎当我不提供蛞蝓时,整个事情都发生了变化。c
被忽略,details
成为控制器并123
成为动作。
[request] => CakeRequest Object
(
[params] => Array
(
[plugin] =>
[controller] => details
[action] => 123
[named] => Array()
[pass] => Array()
[isAjax] =>
)
什么时候是正确的,如果我提供一个蛞蝓,这就是我得到的:
[request] => CakeRequest Object
(
[params] => Array
(
[plugin] =>
[controller] => cars
[action] => index
[named] => Array()
[pass] => Array
(
[0] => 123
[1] => abc
)
[id] => 123
[slug] => abc
[isAjax] =>
)
知道现在可能导致此问题的原因是什么吗?