我最后在routes.php
添加了以下路线。
Router::connect('/:sellername/:itemtitle',
array('controller' => 'items', 'action' => 'view_item_detail'),
array(
'pass' => array('sellername','itemtitle'),
'sellername' => '[a-zA-Z0-9_-]+',
'itemtitle' => '[a-zA-Z0-9_-]+',
)
);
因此,这与http://example.com/john/title-of-an-item
等动态网址相匹配
问题是这也与http://example.com/members/signin
之类的所有其他网址匹配,即使其中有MembersController
个控制器和signin
操作。
我可以使用以下路线输入修复它。
Router::connect(
'/members/:action',
array('controller' => 'members')
);
但是添加上面的每条路线都非常繁琐。
在匹配时,现有的匹配控制器名称是否优先?
routes.php
中的路线顺序是否重要?
答案 0 :(得分:3)
Custom Route classes
是为了帮助你
自定义路由类允许您扩展和更改各个路由解析请求和处理反向路由的方式。路由类应该扩展CakeRoute并实现match()和/或parse()中的一个或两个。 parse()用于解析请求,match()用于处理反向路由。
您可以在使用routeClass选项创建路径时使用自定义路由类,并在尝试使用之前加载包含路由的文件:
Router::connect(
'/:slug',
array('controller' => 'posts', 'action' => 'view'),
array('routeClass' => 'SlugRoute')
);
此路由将创建SlugRoute的实例,并允许您实现自定义参数处理。
custome routing class let you impliment anything
But personal opinion is to user a static and meaning full text in the url that diffrenciate it from the rest.