我正在盯着学习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加载带参数的函数?
答案 0 :(得分:0)
您使用:any
的顺序是错误的,因为这可能会在其余部分之前匹配。即使不是为了安全起见也不应该列出更通用的东西,因为当路由器通过规则时它会在匹配时表示ok,如果它是更普遍或通用的规则,那么它永远不会到达具体的。正如最佳实践规则一样,应该列出更具体的第一个和更通用的最后一个。这就是为什么else在标准条件逻辑中的if和ifelse之后(很明显),但在这种情况下很容易忽略这样的简单规则..
另见 https://ellislab.com/codeigniter/user-guide/general/routing.html
重要的位是
(:num)将匹配仅包含数字的段。 (:any)将匹配包含任何字符的段。
注意:路由将按照定义的顺序运行。较高的路线总是优先于较低的路线。