1

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

我需要捕获的 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-]+')
);

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

4

1 回答 1

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-]+')
);
                                                    ^

这将匹配任何数字。

于 2013-07-06T07:32:53.310 回答