Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:第一次接触命令行是这样的
一、composer命令行演示
composer init
composer -V
composer update
二、小框架实战
1-目录结构:
app:MVC框架成员,控制器、模型、视图;
config:放置配置文件,当前只有一个数据库配置;
core:核心类库,外部依赖的组件等都在这里处理;
public:外部访问目录;
vendor:composer安装的组件都存放在此。
2- 代码:
1)安装Composer
2)安装catfan/medoo
3)安装league/plates
4)更新文件后一定在命令行更新:Composer dump 进行更新
5)安装完毕以后开始写控制器代码MVC
a-控制器:
<?php // 命名空间: 包名称 namespace controllers; // 控制器里面创建一个类 class StaffsController { //模型属性 public $model; //视图属性 public $view; //模型的 构造方法 public function __construct($model, $view) { $this->model = $model; $this->view = $view; } // 视图的方法 public function display() { //在本控制器文件中加载视图文件 include 'app/views/staffs/list.php'; } // 查询数据库 public function select() { //这里调用$this->model 会调用到核心文件 核心文件填写数据库的信息,核心文件继承catfan/medoo 使用的catfan/medoo里面的数据库方法 $staffs = $this->model->select('goods',['id','name','price','number'], ['id[>=]'=>5, 'LIMIT'=>10]); return $this->view->render('staffs/list', ['staffs' => $staffs]); } }
b-模型代码:
<?php namespace models; use core\Model; //继承核心模型 也就是套壳的模型,套壳的模型继承下载的模型和视图方法 class StaffsModel extends Model { public function __construct() { parent::__construct(); } }
c-视图代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>商品表格</title> <style> body { display: flex; flex-direction: column; align-items: center; } table { border-collapse: collapse; border: 1px solid; width: 50%; text-align: center; } th, td { border: 1px solid; padding: 5px; } tr:first-child { background-color: #f79baf; } </style> </head> <body> <h3>商品表格</h3> <table> <tr> <th>id</th> <th>商品名</th> <th>价格</th> <th>数量</th> <th>管理</th> </tr> <?php foreach ($staffs as $staff): ?> <tr> <td><?= $this->e($staff['id']) ?></td> <td><?= $this->e($staff['name']) ?></td> <td><?= $this->e($staff['price']) ?></td> <td><?= $this->e($staff['number']) ?></td> <td><button>编辑</button><button>删除</button></td> </tr> <?php endforeach ?> </table> </body> </html>
6)core核心文件,套壳文件代码,继承第三方组件库
a-模型文件:
<?php namespace core; use Medoo\Medoo; // 公共模型 核心,套壳的文件,下载的模型和视图让它继承,再让真正的视图和模型继承它 class Model extends Medoo { //构造方法 这里的方法参考catfan/medoo官方 public function __construct() { $options = [ 'database_type' => 'mysql', 'database_name' => 'aaa', 'server' => 'localhost', 'username' => 'aaa', 'password' => '123456', ]; parent::__construct($options); } public function init() { } }
b-视图文件:
<?php namespace core; use League\Plates\Engine; // 公共视图 核心,套壳的文件,下载的模型和视图让它继承,再让真正的视图和模型继承它 class View extends Engine { private $templates; //传的参数代表模板路径 public function __construct($path) { $this->templates = parent::__construct($path); } }
7)首页代码 index.php
<?php //自动文件加载器 require 'vendor/autoload.php'; use controllers\StaffsController; use models\StaffsModel; use core\View; // 模型处理 得到模型里面内容 模型继承核心 核心继承下载的模型 $model = new StaffsModel(); // var_dump($model); // echo '<hr>'; // 视图 得到视图里面的内容 也就是商品表 $view = new View('app/views'); // var_dump($view); // echo '<hr>'; // 查询 new控制器 传参模型和视图 $controller = new StaffsController($model, $view); // var_dump($controller); // 直接打印里面的select方法 echo $controller->select();
三、总结:参考了其它同学写的流程和照着去做,基本了解创建框架流程,但最后效果出不来,报错。原因还要查明中。这次作业花的时间最多,composer这几节课要听十次以上,估计才能懂。