2009-07-21 1 views
0

(1.7.1 현재) :모든 세그먼트가 임의 인 동적 URI를 어떻게 처리 할 수 ​​있습니까? CodeIgniter의에서이 같은 URI를 밀어 수있는 방법

example.com/seg1/seg2/seg3/seg4/ 

또는 이름에 표시되지 않는 컨트롤러에서 하나의 클래스 메소드를 통해

example.com/seg1/seg2/ 

등 URI? 일반 PHP 시나리오에서이 같은 mod_rewrite 것을 사용한다 : (유효하지 않은 경우 404를 반환, 내가 살균 및 PHP에서 광범위하게 세그먼트를 확인)

RewriteRule ^([^/]+)/$ myfile.php?one=$1 [L] 
RewriteRule ^([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2 [L] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2&three=$3 [L] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2&three=$3&four=$4 [L] 

그러나 CodeIgniter의에서 나는 방법을 알아낼 수 없습니다

적어도 첫 번째 세그먼트를 하드 코딩하지 않고 이렇게하려면 맞춤 경로를 사용하여 후속 세그먼트를 메소드 호출로 처리하려고합니다.

저는 CI의 초보자이지만이 부분을 제외하고는 기존 사이트 전체를 이식 할 수있었습니다. 나는이 부분에서 어떻게 모든 부분이 모이는지를 보지 못하기 때문에 어떤 제안이라도 환영한다.

명확한 설명 : 내 프로젝트를 시작하기 전에 URI 라이브러리, 라우팅 등의 문서를 읽고, 그들은 다양한 것들에 대한 도움이되었다,하지만이 특정 문제는 그 중 하나에 의해 해결되지 않습니다. URI의 모든 세그먼트가 본질적으로 URI에 명명되지 않은 컨트롤러를 통해 퍼널 될 수있는 방법을 볼 수 없으며 모든 세그먼트가 임의의 위치에 있습니다. 라우팅 예제는 첫 번째 세그먼트의 값을 알고 있다고 가정합니다. 나는 이미 "index.php"및 액세스 세그먼트를 제거하는 방법을 알고 있습니다.

답변

1

사용자 가이드와 위키에서 URI 라우팅을 찾았습니까? 그들은 라우팅, 재 작성 및 다른 URI 세그먼트에 액세스하는 것과 관련하여 거의 모든 것을 알려야합니다.

http://codeigniter.com/user_guide/general/routing.html

http://codeigniter.com/user_guide/libraries/uri.html

http://codeigniter.com/wiki/mod_rewrite/

[편집 :]

여기에 긴 설명입니다 : 이 방법에하지 "하드 코드"첫 번째 세그먼트가 없습니다, 당신 여전히 두 번째 세그먼트를 "하드 코딩"할 수 있습니다. 당신이 거의 시스템의 경로를 편집하여 수행 할 수 있습니다 달성하고 싶다 무엇

/응용 프로그램/설정/routes.php :

$route['(:any)'] = 'your_default_controller/index/$1'; 

$route['default_controller'] = "your_default_controller"; 

그래서, 당신의 URI의 첫 번째 세그먼트는 컨트롤러의 방법이 될 것입니다 .

$this->uri->segment(n) 

각 요청에 대해 원하는 기능을 호출하려면 (초기) URI의 모든 세그먼트에 액세스 할 수 있습니다. 보조 노트에

: 왜 당신은 MVC의 장점을 많이 사용하지 않는, 당신이에 대한 MVC 프레임 워크를 사용하려면 않는?

+0

당신이 $ this-> uri-> 세그먼트 (N)를 사용할 수 있습니다 index.php를 제거한 후 .. 생각 잔여 올바른 대답을했다하지만 당신은 아직 실현되지 않은 : –

+0

감사 잔여.나는 기존 사이트를 포팅했기 때문에이 작업을하고 있는데, 그 중 일부는 수백 개의 디렉토리를 하나의 파일로 줄이기 위해 DB에서 동적으로 만들어진 링크 디렉토리이다. 그래서 당신이 제안한 것이 가장 먼저 시도한 것이지만, 놓친 것은 example.com/seg1/seg2에서 seg2에 액세스하고 다음 경로를 사용하는 것입니다. $ route [ '(: any)'] = 'a_controller/index/$ 1 '은 $ this-> uri-> segment (4)가되고 "index"를 반환하는 $ this-> uri-> segment (2)가 아닙니다. 내가 URI에서 그들을 보았을 때 나는 그것들에 접근 할 것을 기대하고 있었다. 어리석은 초보자 실수, 나를 똑바로 설정해 주셔서 감사합니다 –

+0

.. 그리고 나는 세그먼트 대신 rsegment를 사용하고있었습니다 : p –

관련 문제