【问题标题】:routing at codeigniter doesn't work在 codeigniter 路由不起作用
【发布时间】:2015-07-21 23:51:01
【问题描述】:

我正在学习 codeigniter(我使用的是 3.0.0 版),但是当我尝试使用参数进行路由时遇到了问题

在文件 routes.php 我有:

$route['admin/orders'] = 'admin_orders/index';
$route['admin/orders/(:any)'] = 'admin_orders/index';
$route['admin/orders/getAll'] = 'admin_orders/getAll';
$route['admin/orders/getLast'] = 'admin_orders/getLast';
$route['admin/orders/delete/(:any)'] = 'admin_orders/delete'

;

在 admin_orders.php 我有:

 public function delete(){
        $id = $this->uri->segment(4);
         echo "ok   $id";
   }

在视图中:

<a href="'.site_url("admin").'/orders/delete/3'.'" class="btn btn-info">Delete</a>

但是当我按下删除应用程序重新加载页面时,如果我尝试不使用 /(:any) 函数会加载并显示消息并且其他路由正在工作

当然我做错了什么,如何使用 codeigniter 3 加载一个带有参数的函数?

【问题讨论】:

  • 可能您使用 :any 的顺序是错误的,因为这可能会在其余部分之前匹配。即使它不是为了安全起见,也应该在更一般的最后列出,因为它的工作方式虽然它会在它说好的匹配时停止,如果它是一般的,它永远不会达到特定的。就像最佳实践规则一样。这就是为什么 else 出现在 if 和 ifelse 之后的原因
  • 在他们的文档页面上有一条注释,上面写着ellislab.com/codeigniter/user-guide/general/routing.html
  • tks @ArtisiticPhoenix,你解决了我的问题
  • 太棒了,很高兴我能帮上忙,然后我会把它作为答案发布

标签: php codeigniter codeigniter-3


【解决方案1】:

您使用:any 的顺序是错误的,因为这可能会在其余部分之前匹配。即使不是为了安全起见,也应该在更通用的最后列出一些东西,因为当路由器通过规则工作时,它会在匹配的时候停止,如果它是更通用或通用的规则,那么它永远不会到达具体的。正如最佳实践的规则一样,应该首先列出更具体的内容,最后列出更通用的内容。这就是为什么 else 在标准条件逻辑中出现在 if 和 ifelse 之后的原因(这很明显),但在这种情况下,很容易忽略这样的简单规则..

另见 https://ellislab.com/codeigniter/user-guide/general/routing.html

重要的是

(:num) 将匹配仅包含数字的段。 (:any) 将匹配包含任何字符的段。

注意:路由将按照它们定义的顺序运行。较高的路线总是优先于较低的路线。

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多