Cakephp路线匹配一切

时间:2013-06-08 19:28:27

标签: cakephp url-routing

我最后在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中的路线顺序是否重要?

1 个答案:

答案 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.