2009-12-08 4 views
1

나는 새로운 커스텀 MVC 프레임 워크를위한 간단한 라우팅 시스템을 만들고있다.간단한 PHP 루팅

현재 내 라우터 클래스는 같은 URL을 볼 :

www.example.com/controller/controller_action/some/other/params 

그래서, 기본적으로 ... 나는 컨트롤러 라우팅에 대한 URI의 첫 두 세그먼트를 예약했습니다. 그러나, 단지 다음을 실행하고 싶다면 어떻게해야할까요?

www.example.com/controller/some/other/params 

... 기본 컨트롤러 동작을 실행하고 추가 매개 변수를 보내려고합니까? 여기

나는 간단한 라우터를 사용하고 있습니다 :

\* --- htaccess --- *\ 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA] 

    \* --- index.php --- *\ 
    if (array_key_exists('rt',$_GET)) { 
     $path = $_GET['rt']; 
     $uri = explode('/',$this->path); 
     if(empty($uri[0])) { 
      $load->ctrl('home'); 
     } 
     elseif(empty($uri[1])) { 
      $load->ctrl($uri[0]); 
     } 
     else { 
      $load->ctrl($uri[0],$uri[1]); 
     } 
    } 
    else { 
     $load->ctrl('index'); 
    } 

    \* --- loader class --- *\ 
    public function ctrl($ctrl,$action=null) { 
     $ctrl_name = 'Ctrl_'.ucfirst(strtolower($ctrl)); 
     $ctrl_path = ABS_PATH . 'ctrl/' . strtolower($ctrl) . '.php'; 
     if(file_exists($ctrl_path)) { require_once $ctrl_path;} 

     $ctrl = new $ctrl_name(); 

     is_null($action) ? $action = "__default" : $action = strtolower($action); 
     $ctrl->$action(); 
    } 

나는이 어떻게 할 수

?

+0

어떤 MVC 프레임 워크를 사용하고 있습니까? – Sampson

+0

@Jonathan, 질문에 언급 된대로, 사용자 정의 프레임 워크를 사용하여 (학습을 위해 배우는) ... 따라서 내가 원하는 것을 선택할 수 있습니다.이 문제를 해결할 수있는 간단한 방법이 있어야합니다. 메신저 그냥 그것을 놓치고 ... 감사합니다! – johnnietheblack

답변

1

컨트롤러에서 처리 할 수 ​​있습니다. 일반적으로 MVC 프레임 워크는 요청 된 메서드를 사용할 수없는 경우 기본 메서드를 호출합니다. 이 대체 방법을 덮어 쓰면 원하는 메서드를 호출하고 매개 변수 목록을 매개 변수로 전달할 수 있습니다.

예를 들어, KohanaPHP는 요청 된 메소드가 존재하지 않을 때 호출되는 __call($method, $params) 메소드를 가지고 있습니다. 이 내에서 로직을 처리하거나 MVC 프레임 워크에서 해당 기능을 처리 할 수 ​​있습니다.

이렇게하면 다양한 파일간에 블로스터가 발생하지 않고 컨트롤러 자체에 로직을 유지할 수 있습니다.

+0

내가 무슨 oyu 의미를 얻을 것 같아요 ... 만약 당신이 의미하는, 내 컨트롤러에서 제공된 메서드를 호출 할 가져옵니다 또는 메서드를 찾지 못했습니다 - 해당 메서드를 호출하는 데있는 은행 params 원 ' 그것을 일치시키고 그 방법으로 URI를 쪼개지 않을 것인가? – johnnietheblack

+0

의미는 존재하지 않는 메서드가 요청 될 때 호출되는 missingMethod() 메서드가 있어야한다는 것입니다. Kohana에서는 요청 된 메소드가 첫 번째 매개 변수로 전달되고 제공된 매개 변수가 이어집니다. 이들을 index() 메소드에 패치하면 모든 것이 설정되어야한다. – Sampson

+0

내 의견을 제출하기 바로 전에 편집 한 내용을 ... 내 질문에 대답했습니다. 내 생각에 ... hrm, im iffy하지만이 프레임 워크에 뛰어 들었으므로 지금 당장은 어렵지 않습니다.) 아마 그 좋은 생각 haha ​​ – johnnietheblack