2009-07-09 7 views
1

저는 회사의 설문 시스템을 사용하고 있으며 설문 조사를하는 두 가지 방법이 있도록 시스템에 설정했습니다.CodeIgniter : URL 세그먼트가있는 함수로 지정

1) 새로운 조사 테이커 어떠한 사전 정보는

2) 설문 조사는 이미 발송되고 세션이 만들어졌다.

내가 같이 내 URL을하려는 경우 하나

:
가 ($ surveyID가 취할 수있는 설문 조사의 정수)

을 mydomain.com/SurveySystem/index.php/survey/$surveyID

두 번째 경우에는 응시자와 링크를 만듭니다.

기능 : 나는 그것을 다음과 같이 설정을 가지고
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID 내 설문 조사 클래스에서

: I는 다음과 같이 URL을 싶습니다 색인() {

$segments = $this->uri->total_segments(); 

if($segments == 1){ 
    echo "no surveyID set"; 
    return; 
} 

if($segments == 2){ 
    $this->take_survey($this->uri->segment(2)); 
} 

if($segments == 3){ 
    $this->survey_session($this->uri->segment(3), $this->uri->segment(4)); 
} 

} 어떤 정보도 잘은 IT 에코를 전달되지

. 그러나 surveyID 위치에 정수를 넣으려고하면 컨트롤러에 메서드가로드되고 있다고 생각합니다.

는 도움을 주셔서 감사합니다!

답변

7

URI routing을 사용하여 기본 컨트롤러/함수/인수 매핑을 덮어 씁니다.

예 : 당신의 application/config/routes.php의 :

$route['survey/:num'] = "survey/take_suvey"; 

보너스 : 또한 Removing the index.php file를 참조 index.php/ 부분을 제거 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 그게 정확히 뭔지. index.php를 제거하려고했지만 프로젝트 레벨에서 .htaccess를 추가하고 추가 할 때 에 RewriteEngine RewriteCond $ 1!^(색인 \ .php | images | robots \ .txt) RewriteRule^(. *)) $ /index.php/$1 [L] 항상 아파치 오류가 발생합니다 : -/ – whobutsb

+0

이것은 다시 쓰기 모듈이 설치되어 있지 않거나 재 작성이 권장되지 않음을 의미합니다. 제어 할 수없는 경우 ErrorDocument 메소드를 사용할 수 있습니다. ErrorDocument 404 my_rewriter.php에서 상태 코드 200 (OK)을 보낸 다음 index.php를 포함시킵니다. 그런 다음 실제로 존재하지 않는 페이지에 대해 여전히 404 상태를 반환하는지 확인하십시오. –

2

제 질문은 비우호적 인 URL로, 왜 그렇게 보입니까? 그것은 사용자 관점에서 보면 의미가 아닙니다. 예, index.php를 삭제해야합니다. "제출" "취"

mydomain.com/SurveySystem/index.php/survey/????

mydomain.com/survey/

에 그리고 당신의 CI 클래스 메서드가 감소 될 수있다 또는 다음 URL 재 작성 커플 링, 모든 일이로 감소한다 후속 "검토"

세션은 쿠키 또는 CI 세션 클래스를 사용하여 관리해야합니다. URI에서 상태를 추적해야하는 경우 측량 관련 "세션"과 "guestID"를 base64 인코딩을 사용하여 하나의 세그먼트로 결합하십시오.

마지막으로 제안 된 경로를 사용하면로드 할 측량 ID를 앱이 알 수있는 방법이 없습니다.take_survey하고 그것을 공급 :

$route['survey/(:num)'] = "survey/take_survey/$1";

첫 번째 세그먼트가/설문 조사 후,이 사건을 처리하는 하나 다음에 위치 다른 경로를 필요로하면 숫자 ID를 가지고가는 경우에 "NUM"그것은 캡처해야 $ 1, $ 2를 각각 세션 ID 및 고객 ID입니다

$route['survey/(:num)/(:num)'] = "survey/session_manager/$1/$2";

: 그 부분은 세션 ID입니다. 개인적으로, 나는 이것이 나쁜 형태라고 말할 것입니다. 세그먼트의 의미 론적 의미가 무너 지므로 항상 이러한 경로가 제 위치에 있음을 보장 할 수없는 경우 첫 번째 숫자 세그먼트의 의미 (설문 ID 또는 세션 ID)를 결정하기가 어려워집니다.

관련 문제