2011-11-08 3 views
0

저는 CodeIgniter를 사용하여 사이트를 구축하고 있습니다. 그러나 최근에는 내 컨트롤러 중 하나가 크기가 커졌습니다. 컨트롤러를 하위 폴더 내의 개별 파일로 분할하고 싶습니다. 지금은 다음 ....CodeIgniter - 컨트롤러를 서브 폴더로 구성

나는 다른 부분의 기능이 해당 컨트롤러 내에서

/controller/dashboard.php 있습니다. 사용자 그룹에 섹션에 대한 사용 권한이 있는지 확인하는 검사를 확인합니다. 그래서, URL이

/대시 보드/페이지/내가 설정 하위 폴더를 할 수있는 내 URL이처럼 알고

을 추가 ... 이런 식으로 뭔가 할 수있는 다음 ....

/대시 보드/staff/pages/add

그러나 가능하면 'usergroup'을 생략하고 싶습니다. 나는 이것을 다음과 같이하고 싶다 ....

/controllers/dashboard/-> 직원이 staff.php를로드하고, 사용자가 user.php를로드하면 ....

나는) (다음 중 하나 ....

$ this->로드 -> 컨트롤러를 할 수 없다;

대시 보드 영역을 어떻게 설정 하시겠습니까? 각 사용자 그룹에는 액세스해야하는 다른 항목이 있습니다. 하나의 문서에 모든 것을 넣는 것은 너무 오래 걸리고 그것들을 분리하는 것은 URL에 사용자 그룹을 넣어야한다는 것을 의미합니다.

routes.php에서 검사를 실행할 수 있습니까?

if ($this->user_model->is_user()) { 
    // load this controller 
} 

너희들이 나에 대한 아이디어를 가지기를 바랍니다.

감사합니다, 야곱

답변

1

음, 수도 마스터 컨트롤러의 리디렉션을 사용하여 신속하고 더러운 솔루션 ...

컨트롤러/내부 "대시 보드"컨트롤러 만들기 :

class Dashboard extends CI_Controller { 

function index() 
{ 
    //make a check for the user that returns the usergroup: 
    $user = $this->user_model->is_user(); 
    redirect('controller/'.$user.'/'.$user); 
} 

} 

기본적으로 관리자가 http://www.mysite.com/index.php/dashboard으로 갈 때마다 폴더 컨트롤러의 해당 사용자 컨트롤러로 리디렉션됩니다. 따라서 수표가 "staff"를 반환하면 controller/staff/staff.php 등으로 리디렉션됩니다.

내가 알고있는 한 라우터 구성 내에서 사용자 정의 식을 사용할 수 없습니다.

또 다른 가능한 해결책은 hooks입니다. pre_controller 후크를 사용할 수도 있습니다

pre_controller 컨트롤러 이 호출되기 직전에 호출됩니다. 모든 기본 클래스, 라우팅 및 보안 검사는 완료되었습니다.

뭔가

$hook['pre_controller'][] = array(
           'class' => 'Select', 
           'function' => 'get_usergroup', 
           'filename' => 'Select.php', 
           'filepath' => 'hooks'); 

처럼 그리고 응용 프로그램 내부 Select.php 클래스 파일을 생성/후크는 사용자 그룹 세션 또는 모델에서 잡고있는() 메소드 get_usergroup으로 폴더와 할 리디렉션이 필요합니다.

관련 문제