2009-12-08 98 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 2009-12-08 05:12:38

+0

@Jonathan,在问题中提到,即时通讯使用自定义框架(为了学习而学习)......因此,我可以选择任何我想要的。我知道必须有一种简单的方法来解决这个问题,我只是想念它...谢谢! – johnnietheblack 2009-12-08 05:14:00

回答

1

你可以在你的控制器中处理这个。通常,当请求的方法不可用时,MVC框架将调用默认方法。简单地覆盖此fallback-method来调用您所需的方法并将参数列表作为参数传递。

例如,KohanaPHP有__call($method, $params)方法,当所请求的方法不存在时被调用。你可以处理这个内部的逻辑,或者你的MVC框架中的功能等价物。

这将让你保持控制器本身的内部逻辑,而不是让它在各种文件之间爆炸。

+0

我认为我得到什么oyu的意思...你的意思是,如果我有一个index()方法在我的控制器被调用没有提供的方法,或没有找到方法 - 银行有调用该方法,因为参数赢得' t匹配它,然后在该方法中将URI分开? – johnnietheblack 2009-12-08 05:16:32

+0

我的意思是你应该有一个missingMethod()方法,当请求一个不存在的方法时会被调用。在Kohana中,所请求的方法作为第一个参数传入,随后提供的参数。只需将这些修补到你的index()方法,你应该全部设置好。 – Sampson 2009-12-08 05:18:20

+0

你在我提交我的评论之前就编辑过了......并且你回答了我的问题,我想......人力资源管理,即时通讯就可以了,但是我可以通过深入研究这个框架来恢复,现在不难做到: )它可能是一个好主意哈哈 – johnnietheblack 2009-12-08 05:18:56