2016-09-24 146 views
0

我在main控制器中有功能调用abc用于URL路由的Codeigniter正则表达式问题

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

尝试使用$ 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。你可以有组内的组,排除模式等,但笨可能会对它允许URI路由

+0

工作,但是为什么$ 2的限制,这是我的第一个PARAM,ABC的功能是参照更新的男性或女性 –

+1

答案以帮助解释。希望能帮助到你 – 2114L3