我正在尝试使用松散遵循的MVC设计模式链接到静态页面时的最佳方法。
我首先将所有请求重写为index.php,以处理所有请求并将其分解为控制器,操作和参数的URL。但是,如果我不想遵循此url结构,而只想访问诸如“ http://example.com/home/”之类的静态页面而不必调用某些操作,我将如何实现此目的而又不会收到由路由器/引起的php错误调度程序试图请求一个不存在的文件?
我考虑过设置如下所示的switch语句或if语句,该语句检查url是否设置为某些内容,然后使用自定义的控制器和操作,或者我不确定是否要从中取出静态资源MVC目录并将其分开并以这种方式链接到它?
<?php
class Router
{
static public function parse($url, $request)
{
$url = trim($url);
if ($url == "/")
{
$request->controller = "tasks";
$request->action = "index";
$request->params = [];
}
else
{
$explode_url = explode('/', $url);
$explode_url = array_slice($explode_url, 2);
$request->controller = $explode_url[0];
$request->action = $explode_url[1];
$request->params = array_slice($explode_url, 2);
}
}
}
?>
这可行,但是我不想为很多不同的静态资源设置一个庞大的路由器,因为它感觉很俗气,而且我只是将代码拼凑在一起。将静态页面放在MVC之外的自己的目录中并在视图中链接到它们是否是有效的选择?我是MVC的新手,所以任何指导都很棒。
答案 0 :(得分:1)
您的应用程序不应收到不应处理的请求,您可以在网络服务器级别解决此问题: 例如,如果您使用的是Apache,则可以在.htaccess文件中设置仅当请求的资源不存在时,才应将请求定向到前端控制器(例如:index.php)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L]