Composer自撸一个简单的MVC框架
1.创建MVC架构,视图层,模型层,控制器
2. 创建JSON文件
{
"autoload": {
"psr-4": {
"controllers\\":"app/controllers",
"models\\":"app/models",
"views\\":"app/views",
"core\\":"core"
}
},
"require": {
"catfan/medoo": "^2.1",
"league/plates": "^3.4"
}
}
3.通过Compoesr命令 composer update
引入
4.引入第三方包:
通过第三方包提供的Composer命令,将第三方包引入
catfan/medoo模型包
medoo包内容
league/plates视图包
plates包内容
5.通过JOSN文件,加载Composer的自动加载机制
{
"autoload": {
"psr-4": {
"controllers\\":"app/controllers",
"models\\":"app/models",
"views\\":"app/views",
"core\\":"core"
}
},
"require": {
"catfan/medoo": "^2.1",
"league/plates": "^3.4"
}
}
6.创建自己的核心代码,Model,View去继承第三方包
自己的MODEL
自己的VIEW
入口文件
7.代码展示:
核心代码MODEL
<?php
namespace core;
use Medoo\Medoo;
//公共模型
class Model extends Medoo
{
//构造方法
public function __construct()
{
$option = [
'database_type' => 'mysql',
'database_name' => '16',
'server' => 'localhost',
'username' => 'root',
'password' => 'root',
];
parent::__construct($option);
}
}
核心代码VIEW
<?php
namespace core;
use League\Plates\Engine;
//公共视图
class View extends Engine
{
private $templates;
public function __construct($path)
{
$this->templates = parent::__construct($path);
}
}
MVC架构
视图层
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>员工管理系统</title>
</head>
<body>
<h3>员工表</h3>
<table>
<tr>
<td>id</td>
<td>姓名</td>
<td>密码</td>
<td>性别</td>
<td>管理</td>
</tr>
<?php foreach($staffs as $staff): ?>
<tr>
<td><?= $this->e($staff['id']) ?></td>
<td><?= $this->e($staff['uname']) ?></td>
<td><?= $this->e($staff['pwd']) ?></td>
<td><?= $this->e($staff['gender'])?></td>
<td><button>编辑</button><button>删除</button></td>
</tr>
<?php endforeach ?>
</table>
<p>
<a href="">1</a>
<a href="">2</a>
<a href="">3</a>
<a href="">4</a>
<a href="">5</a>
<a href="">6</a>
</p>
</body>
</html>
模型层
<?php
namespace models;
use core\Model;
class StaffsModel extends Model
{
public function index()
{
return 'OK';
}
public function __construct()
{
parent::__construct();
}
}
控制器
<?php
//命名空间:包名称
namespace controllers;
use core\Model;
class StaffsController
{
public $model;
public $view;
public function __construct($model,$view)
{
$this->model = $model;
$this->view = $view;
}
public function index()
{
return 'Hello php.cn';
}
public function display()
{
include 'app/views/staffs/list.php';
}
//查询
public function select()
{
$staffs = $this->model->select('user',['id','uname','pwd','gender']
,['id[>=]'=>5,'LIMIT'=>10]
);
return $this->view->render('staffs/list',['staffs' =>$staffs]);
}
}
入口文件
<?php
require 'vendor/autoload.php';
use controllers\StaffsController;
use core\View;
use models\StaffsModel;
// //控制器
// echo (new StaffsController)->index();
// echo '<hr>';
// //模型
// echo (new StaffsModel)->index();
// echo '<hr>';
// //视图
// echo (new StaffsController)->display();
//模型处理
$model = new StaffsModel();
// var_dump($model);
// echo '<hr>';
//视图
$view = new View('app/views');
// var_dump($view);
// echo '<hr>';
//查询
$controller = new StaffsController($model,$view);
// var_dump($controller);
echo $controller->select();