0

我正在学习 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加载一个带有参数的函数?

4

1 回答 1

0

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

另请参阅 https://ellislab.com/codeigniter/user-guide/general/routing.html

重要的位是

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

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

于 2015-07-22T00:10:54.317 回答