我正在使用 MVC 结构创建一个网站。下面是我用来使用干净 URL 并加载适当文件的代码。但是它只适用于第一级。
说我想参观mywebsite.com/admin
它会起作用,但mywebsite.com/admin/dashboard
不会。问题出在数组中,如何让数组在第二级和第二级之后加载内容。
最好创建一个这样的数组吗?
Array
- controller
- view
- dashboard
这里的任何帮助都会很棒。也作为一个附带问题。设置“自定义”网址的最佳方式是什么。因此,如果我要放入mywebsite.com/announcement
它会检查它是否有控制器,如果失败,请检查它是否有自定义内容(可能是“customs”文件夹中的同名文件,然后如果没有,则执行 404页面未找到的东西)虽然这不是一个优先问题,但与代码的工作方式松散相关,所以我认为最好添加。
function hook() {
$params = parse_params();
$url = $_SERVER['REQUEST_URI'];
$url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $url);
$urlArray = array();
$urlArray = explode("/",$url);
var_dump($urlArray);
if (isset($urlArray[2]) & !empty($urlArray[2])) {
$route['controller'] = $urlArray[2];
} else {
$route['controller'] = 'front'; // Default Action
}
if (isset($urlArray[3]) & !empty($urlArray[3])) {
$route['view'] = $urlArray[3];
} else {
$route['view'] = 'index'; // Default Action
}
include(CONTROLLER_PATH.$route['controller'].'.php');
include(VIEW_PATH.$route['controller'].DS.$route['view'].'.php');
var_dump($route['controller']);
var_dump($route['view']);
var_dump($urlArray);
var_dump($params);
// reseting messages
$_SESSION['flash']['notice'] = '';
$_SESSION['flash']['warning'] = '';
}
// Return form array
function parse_params() {
$params = array();
if(!empty($_POST)) {
$params = array_merge($params, $_POST);
}
if(!empty($_GET)) {
$params = array_merge($params, $_GET);
}
return $params;
}