【问题标题】:CakePHP routes always pointing to same actionCakePHP 路由总是指向同一个动作
【发布时间】:2014-03-05 14:39:00
【问题描述】:

我在cakephp下的路由遇到一些问题

我的控制器中有三个动作

它们如下

www.example.com/photos/newphotos
www.example.com/photos/random
www.example.com/photos/popular

我希望他们像

www.example.com/newphotos
www.example.com/random
www.example.com/popular

所以我在我写的配置文件下路由文件

Router::connect('/:newphotos', array('controller' => 'photos', 'action' => 'newphotos'));
Router::connect('/:popular', array('controller' => 'photos', 'action' => 'popular'));
Router::connect('/:random', array('controller' => 'photos', 'action' => 'random'));

当我点击 url 时它工作正常 www.example.com/newphotos

但是当我点击网址 www.example.com/random 或 www.example.com/popular 时,它再次指向动作 newphotos。

那我该如何解决呢

(换句话说,我需要为每个操作从 url 中删除控制器名称“photos”)

非常感谢

【问题讨论】:

    标签: php cakephp routes


    【解决方案1】:

    为什么不从路由中删除:

    如果您想坚持使用/: 路径,那么您需要向Router::connect() 提供第三个参数,在其中指定添加选项的模式。也就是说,如果你有/:popular作为第一个参数,你需要array('popular' => 'popular')作为第三个参数,使得规则看起来像:

    Router::connect('/:popular', array('controller' => 'photos', 'action' => 'popular'), array('popular' => 'popular'));
    

    这意味着:popular 将与给定的正则表达式匹配,即字面“流行”。请参阅CakePHP's docs 了解更多信息。

    尽管如此,这既无用又愚蠢,因此您应该坚持使用不带冒号的路径。

    【讨论】:

    • 非常感谢 :)
    【解决方案2】:

    只需从第一个参数中删除冒号。它们是一种“捕获变量”,所以现在您基本上将所有带有一些参数的/ 路由到photos/newphotos,并将参数捕获到:newphotos。因为它总是会匹配第一条路线,所以它不会寻找其他路线。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多