【问题标题】:Why doesn't my route codeigniter go to correct action controller?为什么我的路由代码点火器不去正确的动作控制器?
【发布时间】:2013-02-02 16:59:47
【问题描述】:

这是我的路线

$route['posts/(:any)'] = 'posts/get_show/$1';
$route['posts/(:any)/dosomething'] ='posts/get_dosomething/$1';

控制器

public function get_show($id)
public function get_dosomething($id)

使用链接posts/1/dosomething,路由总是指向动作get_show,它永远不会指向get_dosomething

知道如何解决吗?谢谢

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    你必须先这样走

    $route['posts/(:any)/dosomething'] ='posts/get_dosomething/$1';
    $route['posts/(:any)'] = 'posts/get_show/$1';
    

    【讨论】:

    • 天哪,这看起来很傻。你能解释一下为什么会这样吗?
    • 因为这个any 是贪婪的。与其他框架不同,CI 将其视为任意数量的参数的可选参数。
    • 这就像一本书..也不要跳到最后..你在你的路线中说,posts/(:any) 正在调用 get_show()... 现在你调用 posts /(:any)/something... 因此它必须是这个顺序
    • CI 的方法有点错误。 :any 是一个段。如果我说post/foo 那么没关系。但如果是post/foo/bar,那么它不应该通过那个过滤器,因为有一个额外的段。
    • 解释为什么它通过匹配的第一个规则来工作 CI 路由(而且很多系统不只是 CI 这样做)。因此,由于 (:any) 是通配符,它​​将匹配发布和停止后第一段中的任何内容。路由时,你必须从最具体到最广泛的范围,记住这条规则,你会没事的。
    【解决方案2】:

    因为posts/1/dosomething 总是落入 $route['posts/(:any)'] 之下。更改您的路线条件之一

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      相关资源
      最近更新 更多