2016-09-24 3 views
0

main 컨트롤러에 abc이라는 함수 호출이 있습니다. URL 라우팅을위한 Codeigniter 정규식 문제

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

은 내가

http://localhost/males/7 

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

을 다음과 같은 기능 abc에 대한 URL 경로를 사용하는 경우하지만 난 별도로 사용 때 작동합니다. 왜?

$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'; 

사용해보십시오 당신이 원하는.

의견 당 업데이트;

(URI routing 및 정규식) $ 1 $ 2 $ 3은 정규식 캡처 그룹에서 캡처 한 데이터의 변수입니다. 그들은 왼쪽에서 오른쪽으로 그룹의 순서입니다. 위의 라우팅 규칙에는 두 개의 캡처 그룹이 있습니다. $ 1 (male|female)이며 $route['males/([1-7]+)'] = 'main/abc/$1';로 변경 하나의 캡처 그룹이 지금있을 때 $ 2 ([0-9]+)

이다; $ 1은 ([1-7]+)

내각이 속하는 그룹 (또는 하위 패턴)은 () 대괄호 안에 있습니다. more info here

참고 : 정규 표현식에서 '변수'는 ​​'역 참조'에서 참조 할 수 있습니다. more info here. 당신은 그룹 내에서 그룹을 가질 수 있고 패턴 등을 제외 할 수 있습니다.하지만 코드 서명자는 URI 라우팅을 허용하는 것에 한계가있을 수 있습니다.

+0

왜 $ 2인지, 그것은 제 1 파라미터이며, abc 함수는 남성 또는 여성에 대한 참조입니다. –

+1

updated 설명하는 데 도움이되는 대답. 도움이되기를 바랍니다. – 2114L3