我没有使用MVC结构,因为我觉得很难处理。所以,在我的所有网络项目中,我正在逐步使用。 (我不知道确切的单词,但是使用WordPress的结构。即逐个加载文件。)
我正在使用index.php
将所有网址请求重定向到.htaccess
文件,并从中获取网址查询。然后使用该查询我加载适当的页面。
网站的index.php
文件
// load all configuration files, function files here.
$query = ( isset ($_GET['q']) ) ? $_GET['q'] : "index";
if ( !userLoggedIn() ) {
if ($query == "index") {
include_once ("pages/index.php");
} elseif ($query == "signup") {
include_once ("pages/signup.php");
} else {
include_once ("pages/404.php");
}
} else {
if (in_array($query, get_list_of_usernames())) {
include_once ("pages/users.php");
} elseif () {
// and so on...
} else {
include_once ("pages/404.php");
}
}
现在,我的问题,
答案 0 :(得分:1)
路由只是MVC的一部分,是控制器部分的一部分。理论上,MVC模式可以被视为与您想要路由的不同。 MVC更多的是关于如何构建代码。
我曾经做过类似的事情,用于家庭酿造方法。这取决于具有操作方法的控制器类。
您需要有一个名为Controller
的基类,并且所有控制器类都需要扩展它。所以基本控制器为class Controller {}
,任何控制器都可能像class someController extends Controller { function someAction() {} }
...调用方法将是http://mysite/someController/someAction
的index.php:
// include callable controllers here
$partsA = explode("?", $_SERVER['REQUEST_URI']); // split querystring
$partsB = explode("/", $partsA[0]); // get url parts
if (count($partsB) < 2)
die("missing controller in url");
elseif (count($partsB) < 3)
die("missing action in url");
$className = $partsB[1];
$methodName = $partsB[2];
if (class_exists($className))
if (!is_subclass_of($className, "controller"))
die(htmlspecialchars("Class $className doesn't extend controller")); // prevents use of unauthorized classes
else
$controller = new $className();
else
die(htmlspecialchars("Class $className doesn't exist"));
if (!method_exists($controller, $methodName))
die(htmlspecialchars("Method $methodName doesn't exist"));
else
$controller->$methodName();
Controller.php :(基本控制器)
class Controller {}
现在任何控制器....例如SomeController.php:
class someController extends Controller {
function someAction() {
echo "test";
}
}
...调用someAction()
方法将使用http://mysite/someController/someAction
完成,向您显示test