今天研究了下php mvc结构,所以决定自己写个简单的mvc,以待以后有空再丰富。
至于什么mvc结构,其实就是三个model,contraller,view单词的简称,,model,主要任务就是把数据库或者其他文件系统的数据按 照我们需要的方式读取出来。view,主要负责页面的,把数据以html的形式显示给用户。controller,主要负责业务逻辑,根据用户的 request进行请求的分配,比如说显示登陆界面,就需要调用一个控制器usercontroller的方法loginaction来显示。
下面我们用php来创建一个简单的mvc结构系统。
首先创建单点入口,即bootstrap文件index.php,作为整个mvc系统的唯一入口。什么是单点入口呢?所谓单点入口就是整个应用程序只有一 个入口,所有的实现都通过这个入口来转发。为什么要做到单点入口呢?单点入口有几大好处:第一、一些系统全局处理的变量,类,方法都可以在这里进行处理。 比如说你要对数据进行初步的过滤,你要模拟session处理,你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面。第二、程序的架构更加 清晰明了。当然好处还有很多的。:)
include(core/ini.php);
initializer::initialize();
$router = loader::load(router);
dispatcher::dispatch($router);
这个文件就只有4句,我们现在一句句来分析。
include(”core/ini.php”);
我们来看core/ini.php
action=isset($routeparts[1])? $routeparts[1]:base;
array_shift($routeparts);
array_shift($routeparts);
$this->params=$routeparts;
}
public function getaction() {
if (empty($this->action)) $this->action=main;
return $this->action;
}
public function getcontroller() {
return $this->controller;
}
public function getparams() {
return $this->params;
}
}
我们可以看到,首先我们是拿到$_get,用户request的url,然后从url里我们解析出controller和action,以及params
比如我们的地址是http://www.tinoweb.cn/user/profile/id/3
那么从上面的地址,我们可以拿到controller是user,action似乎profile,参数是id以及3
ok我们看最后一句,就是
dispatcher::dispatch($router);
这句话的意思很明了,就是拿到url解析的结果,然后通过dispatcher来分发controlloer及action来response给用户
好,我们来看下dispatcher.php文件
class dispatcher
{
public static function dispatch($router)
{
global $app;
ob_start();
$start = microtime(true);
$controller = $router->getcontroller();
$action = $router->getaction();
$params = $router->getparams();
$controllerfile = app/controllers/{$controller}.php;
if (file_exists($controllerfile)){
require_once($controllerfile);
$app = new $controller();
$app->setparams($params);
$app->$action();
if (isset($start)) echo
tota1l time for dispatching is : .(microtime(true)-$start). seconds.
;
$output = ob_get_clean();
echo $output;
}else{
throw new exception(controller not found);
}
}
}
这个类很明显,就是拿到$router来,寻找文件中的controller和action来回应用户的请求。
ok,我们一个简单的,mvc结构,就这样,当然这里还不能算是一个很完整的mvc,因为这里还没有涉及到view和model,有空我再这里丰富。
我们来写个controller文件来测试下上面的这个系统。
我们在app/controllers/下创建一个user.php文件
//user.php
class user
{
function base()
{
}
public function login()
{
echo 'login html page';
}
public function register()
{
echo 'register html page';
}
public function setparams($params){
var_dump($params);
}
}
然后你可以在浏览器中输入http://localhost/index.php?user/register 或者 http://localhost/index.php?user/login来测试下。
