在codeigniter处路由并不起作用

时间:2015-07-21 23:51:01

标签: php codeigniter codeigniter-3

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

1 个答案:

答案 0 :(得分:0)

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

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

重要的位是

  

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

     

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