2016-09-24 16 views
0

mainコントローラにabcという関数呼び出しがあります。私はURLルーティング用のCodeigniter正規表現問題

http://localhost/males/7 

$route['(males|female)']   = 'main/abc'; //working 
$route['(males|female)/([0-9]+)'] = 'main/abc/$1'; //not working 

しかし、私は別々に使用する場合、それが動作を以下のように機能abc用URLルートを使用

public function abc($value = NULL) 
{ 
    if ($value == 10) { 
     echo "value is 10"; 
    } else { 
     echo "value is not TEN"; 
    } 
} 

。どうして?

$route['(males|female)'] = 'main/abc'; 
$route['males/([1-7]+)'] = 'main/abc/$1'; 
$route['female/([1-7]+)'] = 'main/abc/$1'; 

答えて

0

私は$ 1でない数字

あなたが最初のキャプチャグループを落としてきたように、それはあなたの第二の場合に動作し、$ 1は今参照している(males|female)にマッチングされると信じて$ 2

$route['(males|female)/([0-9]+)'] = 'main/abc/$2'; 

使用してみてくださいあなたが欲しいもの。

コメントごとに更新。

as URI routingと正規表現。 $ 1 $ 2 $ 3は、正規表現のキャプチャグループから取得したデータの変数です。彼らは左から右のグループの順になっています。上のルーティングルールには2つのキャプチャグループがあります。 $ 1 (male|female)で、$ 2は([0-9]+)

あなたは$route['males/([1-7]+)'] = 'main/abc/$1';に変化したときのみ1キャプチャグループが現在存在しています。 $ 1は([1-7]+)

となります。()括弧内にはキャプチャグループ(またはサブパターン)が入ります。 more info here

注:これらの '変数'は '後方参照'で参照できます。 more info here。グループ内にグループを持ち、パターンなどを除外することができますが、codeigniterにはURIルーティングの制限があります。

+0

なぜ$ 2、それは私の1番目のパラメータですか、abc関数は男性または女性への参照です –

+1

updated説明するための答え。それが役に立てば幸い – 2114L3