上一章 我们学习了 框架的入口文件 自动加载和路由
接下来我们继续学习 C - M - V
由路由 分配到控制器 控制器调用model 最后展示视图
路由好了之后 我们该根据路由返回的控制器名方法名 去加载控制器和方法了
public static function run()
{
$route = new \core\lib\route();
$ControllerName = ucfirst($route->controller);
$ActionName = $route->action;
$ControllerFile = APP . '/controllers/' . $ControllerName . 'Controller.php';
$ControllerClass = '\\' . MODULE .'\controller\\' . $ControllerName . 'Controller';
if(is_file($ControllerFile)){
include $ControllerFile;
$controller = new $ControllerClass();
$controller->$ActionName();
}else{
throw new \Exception("找不到控制器".$ControllerName);
}
}
新建一个控制器 IndexController.php
先P输出一个 this is index
在url 输入 www.xxx.com(你的虚拟域名)/index/index
页面显示 this is index
<?php
namespace application\controller;
class IndexController extends \core\imooc
{
public function index()
{
p("this is index");
$model = new \core\lib\model();
$sql = "select * from news";
$ret = $model->query($sql)->fetchAll();
$this->assign('list',$ret);
$this->display('index.php');
}
}
大家可能看不懂 P方法是什么
下面贴上我自定义这个方法的代码
<?php
function P($var){
if (is_bool($var)) {
var_dump($var);
} else if (is_null($var)) {
var_dump(NULL);
} else {
echo "<pre style='position:relative;z-index:1000;padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;font-size:14px;line-height:18px;opacity:0.9;'>" . print_r($var, true) . "</pre>";
}
}
就是一个打印函数
接下来要连接数据库了
那么我们再新建一个model基类
他继承自php的POD类
这样这个类本身就有自带一些方法了
<?php
namespace core\lib;
class model extends \PDO
{
public function __construct()
{
$dns = 'mysql:host=localhost;dbname=laravel;charset=utf8';
$username = 'root';
$passwd = 'root';
try {
parent::__construct($dns ,$username ,$passwd);
} catch (\PDOException $e){
p($e->getMessage());
}
}
}
数据也取到了 那么我们该把数据赋值并显示在页面上了
我们在TP框架中有个
assign和display方法
借鉴一下
public $assign;
public function assign($name,$value)
{
$this->assign[$name] = $value;
}
public function display($file)
{
$file = APP . '/views/' . $file;
if(is_file($file))
{
extract($this->assign);
include $file;
}
}
最后在views 文件夹 新建一个index.php 展示数据
<h1>简易MVC</h1>
<table>
<tr>
<td>ID</td>
<td>content</td>
<td>title</td>
</tr>
<?php foreach($list as $v){ ?>
<tr>
<td><?php echo $v['art_id']?></td>
<td><?php echo $v['content']?></td>
<td><?php echo $v['title']?></td>
</tr>
<?php } ?>
</table>
打开页面发现 展示成果
那么我们最最简易的mvc就封装完成了!
虽然还有一些缺点
比如 一些参数都写的比较死 还没有日志操作类
在接下来的框架入门 中级篇当中 我们会继续学习不断完善这个框架
敬请期待