在在线学习了一些教程之后,我构建了自己的 PHP MVC 框架。我使用.htaccess
如下的入口脚本来完成这一切:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]
我有一个路由器类,它基本上翻译 URL 并将其划分为动作/控制器段:
$route = (empty($_GET['rt'])) ? '' : $_GET['rt'];
if (empty($route))
{
$route = 'index';
}
else
{
/*** get the parts of the route ***/
$parts = explode('/', $route);
$this->controller = $parts[0];
if(isset( $parts[1]))
{
$this->action = $parts[1];
}
}
我想要做的是更进一步,并实际定义除了自动路由之外的 URL 重写规则。所以基本上我希望能够做这样的事情:
$rules = array(
'directory/listing/<id>' => 'listing/index',
'directory/<category>/<location>' => 'directory/view',
);
在上面,数组键是输入的 URL - 尖括号中的部分是动态变量(如 GET 变量)。数组值是请求需要被路由到的地方(控制器/动作)。所以对于以上两条规则,我们有以下两个动作:
public function actionIndex($id) {
}
public function actionView($category, $location) {
}
所以本质上 URL 需要首先检查数组键,如果它匹配其中一个键,那么它需要使用数组值作为控制器/动作对。
有人知道如何解决这个问题吗?