2015-07-21 148 views
0

我盯着学习笨(我使用的是3.0.0版本),但我有一个porblem当我试图用参数路由在笨不起作用

在文件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> 

但是,当我按下删除应用程序重新加载页面,如果我尝试不使用/( :任何)功能加载并显示我的消息和其他路线工作

当然,我做错了什么,我怎么可以加载一个函数与参数使用codeigniter 3?

+0

可能是您的使用顺序:任何错误,因为这可能会在其余之前匹配。即使它不是应该列在更普遍的最后才是安全的,因为它的工作方式虽然会在它确定匹配时停止,并且如果它通常是首先它永远不会达到特定的。正如最佳实践规则一样。这就是为什么在if和ifelse之后出现的其他问题 – ArtisticPhoenix

+0

他们的文档页面上有一个注释,它说明尽可能多的https://ellislab.com/codeigniter/user-guide/general/routing.html – ArtisticPhoenix

+0

tks @ArtisiticPhoenix,你解决了我的问题 – GaF

回答

0

您的订单使用:any是错误的,因为这可能会匹配之前。即使不是应该在更一般的最后列出的事情才是安全的,因为当路由器按照规则工作时,它会在它确定匹配时停止,并且如果它是更一般或通用的规则,那么它永远不会达到具体。正如最佳做法的规则,应该列出更具体的第一个和更通用的最后一个。这就是为什么其他人来了,如果以后在标准条件逻辑ifelse(这是显而易见的),但在这样的情况下,很容易忽视简单的规则一样的..

也看到 https://ellislab.com/codeigniter/user-guide/general/routing.html

重要的位是:

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

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