2012-11-12 2 views
2

저는 codeigniter에서 시작하고 있습니다. 동일한 경로 설정으로 URL에서 컨트롤러 이름을 숨기려고합니다.동일한 경로를 사용하는 URL에서 Codeigniter 컨트롤러 이름을 숨기기

나는 집이라는 동일한 기능을 갖는 학생, 교직원, 선생님 3 컨트롤러는,이

$route['home'] = 'students/home'; 
$route['home'] = 'staff/home'; 

이 작업을 수행 할 수있는 방법이 분명히 작동하지 않습니다나요? 내가이

session_start()  
$route['home'] = $_SESSION['user_type'].'/home'; 

같은 시도 그래서 세션 데이터는 사용자 유형을 포함 CodeIgniter의 세션 클래스를 사용했다하지만 난 어쩌면 그것 CodeIgniter의 세션 클래스를 사용하여, 세션 데이터를 얻을 질수 ?? 그래서 어떻게 데이터를 얻을 수 있습니까? 아니면 다른 해결책이 있습니까?

+0

귀하의 URL은 무엇입니까? 내가 볼 수 있듯이'/ home '을 여러 컨트롤러/메소드로 라우팅하려고 시도하고 있는데 불가능합니다. (라우팅 논리 자체를 사용하는 방법이 없다면) –

+0

localhost/ci_project/students/home, ../staff/home, 컨트롤러와 함께 각 사용자 유형을 처리하며 각각 홈 기능이 있습니다. 나는 그것을 동적으로 할 수 있습니까? –

+0

아마 동적으로 할 수있는 방법이 있지만 CodeIgniter가 잘 작동하는지 잘 모르겠습니다. 예를 들어 [클래스로드] (http://stackoverflow.com/questions/5072352/instantiating-class-by-string-using-php-5-3-namespaces) 및 [메소드 호출] (http : //stackoverflow.com/questions/1005857/how-to-call-php-function-from-string-stored-in-a-variable) 문자열을 기반으로합니다. –

답변

2

아마도 당신은 일반적인 컨트롤러를 작성하고 두 번째 URI 매개 변수로 분산해야합니다

홈/학생이나 집/직원

$route['home/:any'] = "home"; 

및 홈 컨트롤러의 색인 방법 :

public function index() 
{ 
    $type = $this->uri->segment(2); 
    switch($type){ 
     case "student": 
      $this->student(); 
     break; 
     case "staff": 
      $this->staff(); 
     break; 
     default: 
      $this->some_other_method(); 
     break; 
    } 
} 

분명히 학생과 교직원 방법을 만들고 필요한 경우 다르게 처리 할 수 ​​있습니다.

사이드 노트 - 왜 컨트롤러의 이름을 숨기시겠습니까? 그게 보안 구멍이나 뭐 그런 건 아니야.

+0

고마워, 내가 생각에 .. 글쎄, 난 컨트롤러에서 한판 승부 6 방법이 있고, 나는 4 컨트롤러가 ... 오, 내가 더 할 일이있다. 음, 사용자 유형을 숨기도록 요청되었습니다. –

관련 문제