2010-05-09 4 views
2

Codeiginiter 프로젝트의 모든 컨트롤러 목록을 얻고 싶으므로 각 코드를 쉽게 반복하여 정의 된 경로를 추가 할 수 있습니다. 내가 뭘했는지 나에게 줄 방법을 찾지 못하는 것 같아? 더 난 것을 약간을 설명하기 위해Codeigniter 프로젝트에서 모든 컨트롤러의 배열을 얻는 방법은 무엇입니까?

// I'd like $controllers to be dynamically populated by a method 
// 
$controllers = array('pages', 'users'); 

// Loop through each controller and add controller/action routes 
// 
foreach ($controllers as $controller) { 
    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

// Any URL that doesn't have a/in it should be tried as an action against 
// the pages controller 
// 
$route['([^\/]+)$'] = 'pages/$1'; 

업데이트 # 1

- : 여기

내가 배열에 액세스하고 싶은 routes.php 파일에서 코드입니다 달성하기 위해 노력하고있다. 나는 About, contact-us, privacy 등과 같은 페이지들을 포함하는 Pages 컨트롤러를 가지고있다.이 페이지들은/about,/contact-us 그리고/privacy를 통해 모두 접근 할 수 있어야한다. 기본적으로 페이지 컨트롤러의 모든 작업/메소드는/pages/< 액션 >을 지정하지 않고도 액세스 할 수 있어야합니다.

내가 올바른 방향으로 가고 있는지 확실하지 않습니까? 그럼 직접 질문을 코딩에 대한 답변을

+0

@ash를 추가, 당신은 더 나은 당신의 .htaccess로 시도하고 일을에 의해 제공 될 수 있는가? 왜/당신이 뭘 하려는지에 대한 간단한 설명도 멋질 것입니다, 감사합니다! – k00k

답변

7

, 당신은이 작업을 수행 할 수 있습니다 :이 Buuuuuut

foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller) 
{ 
    $controller = basename($controller, EXT); 

    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

을 선 아래로 더 가장 유연한 방법으로 밖으로 작동하지 않을 수 있습니다.

다른 방법으로 몇 가지가 있습니다. 하나는 MY_Router를 만들고 삽입하는 것입니다. show_404() 대신/대신에

$this->set_class('pages'); 
$this->set_method($segments[0]); 

;

컨트롤러/메소드/경로가 처음으로 매핑되지 않는 경우에만 /pub/contact에 보내고/contact합니다.

OOOOOOORRRRRR 사용 Modular Separation과 주요 routes.php에 다음

$routes['404'] = 'pages'; 
+0

고맙습니다. :) 두 가지 좋은 옵션! – ash

+2

훌륭한 옵션 3 가지. ;-) –

+0

매우 도움이됩니다! 감사 :) –

관련 문제