【问题标题】:CakePHP route brokenCakePHP 路由中断
【发布时间】:2013-07-05 21:57:54
【问题描述】:

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

我需要捕获的网址是这种格式:

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

它没有转到posts 控制器的view 操作,而是转到稍后在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 不匹配?

【问题讨论】:

    标签: php cakephp routing


    【解决方案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-]+')
    );
                                                        ^
    

    这将匹配任何数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2012-03-03
      相关资源
      最近更新 更多