我在abc
控制器中有函数调用main
。
public function abc($value = NULL)
{
if ($value == 10) {
echo "value is 10";
} else {
echo "value is not TEN";
}
}
当我使用URL路由功能abc
时,如下所示
http://localhost/males/7
$route['(males|female)'] = 'main/abc'; //working
$route['(males|female)/([0-9]+)'] = 'main/abc/$1'; //not working
但是当我单独使用时,它有效。为什么呢?
$route['(males|female)'] = 'main/abc';
$route['males/([1-7]+)'] = 'main/abc/$1';
$route['female/([1-7]+)'] = 'main/abc/$1';
答案 0 :(得分:0)
尝试使用$ 2
$route['(males|female)/([0-9]+)'] = 'main/abc/$2';
我认为$ 1匹配(males|female)
而不是数字
它适用于你的第二种情况,因为你已经删除了第一个捕获组,现在$ 1引用了你想要的东西。
根据评论更新;
根据URI routing和正则表达式。 $ 1 $ 2 $ 3是从正则表达式捕获组捕获的数据的变量。它们按从左到右的顺序排列。所以在上面的路由规则中有两个捕获组;
1美元为(male|female)
,$ 2为([0-9]+)
当您更改为$route['males/([1-7]+)'] = 'main/abc/$1';
时,现在只有一个捕获组; $ 1是([1-7]+)
捕获组(或子模式)在()
括号内是什么。更多info here
注意:在正则表达式中,这些“变量”可以在“反向引用”中引用。更多info here。您可以在组内拥有组,排除模式等,但codeigniter可能限制它允许URI路由