可能重复:
MVC 中的 CMS 路由
我想实现 MVC 设计结构,目前正在努力寻找解析请求视图的好解决方案。
在我的路由文件中,我有以下代码:
public function parseRequestedView() {
$this->ressource_requested = explode('/', trim($_GET['view'], '/'));
// e.g.: http://www.foo.com/article/{id}/comments/show
if (!empty($this->ressource_requested[3])) {
// Format: [0] viewpoint (article), [1] child (comments), [2] action (show), [3] reference ({id}),
// [4] additional information (from $_POST)
return array($this->ressource_requested[0], $this->ressource_requested[2], $this->ressource_requested[3],
$this->ressource_requested[1], $_POST);
// e.g.: http://www.foo.com/article/{id}/show
} elseif (!empty($this->ressource_requested[2])) {
return array($this->ressource_requested[0], NULL, $this->ressource_requested[2], $this->ressource_requested[1],
$_POST);
// e.g.: http://www.foo.com/archive/show
} else {
return array($this->ressource_requested[0], NULL, $this->ressource_requested[1], NULL, NULL);
}
}
这个想法是,无论访问者在浏览器中输入什么,该函数都会解析请求并始终返回相同的格式化数组/输出。主机名后面的 URL 的第一段始终是主要观点(例如:文章)。最后,我通过另一个名为 includeTemplateFile() 的函数来包含视图。这些文件具有以下命名约定:
viewpoint.child.action.template.php
e.g.: article.comments.show.template.php
我现在的问题是:有更优雅的解决方案吗?我阅读了一些关于这个主题的教程/文章(例如:http://johnsquibb.com/tutorials/mvc-framework-in-1-hour-part-one ),但我不喜欢大多数解决方案,因为它们不是精心设计。
这是 .htaccess 文件的内容:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?view=$1 [L,QSA]
提前致谢。