CakePHP路线坏了

时间:2013-07-05 21:57:55

标签: php cakephp routing

我需要在我的网站上定义查看帖子的路线,我遇到了一些麻烦。

我需要捕获的URL采用以下格式:

http://mysite.com/category/10-post-slug

我做了这条不起作用的路线:

Router::connect(
    '/:category/:id-:slug', 
    array('controller' => 'posts', 'action' => 'view'), 
    array('category' => '[a-z0-9-]+', 'id' => '[0-9+]', 'slug' => '[a-z0-9-]+')
);

而不是转到view控制器的posts操作,而是转到稍后在routes.php中定义的另一条路线:

Router::connect(
    '/:parent/:category', 
    array('controller' => 'posts', 'action' => 'viewCategory'), 
    array('parent' => '[a-z0-9-]+', 'category' => '[a-z0-9-]+')
);

为什么我的第一条路线与网址/category/10-post-slug不匹配?

1 个答案:

答案 0 :(得分:1)

您的路线并不代表您的想法

Router::connect(
    '/:category/:id-:slug', 
    array('controller' => 'posts', 'action' => 'view'), 
    array('category' => '[a-z0-9-]+', 'id' => '[0-9+]', 'slug' => '[a-z0-9-]+')
);
                                                   ^

您拥有的有效ID的模式是以下列表中的任何单个字符:

0123456789+

所以它不会匹配任何高于9的id。相反,你需要:

Router::connect(
    '/:category/:id-:slug', 
    array('controller' => 'posts', 'action' => 'view'), 
    array('category' => '[a-z0-9-]+', 'id' => '[0-9]+', 'slug' => '[a-z0-9-]+')
);
                                                    ^

哪个匹配任何数字。