Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:这类工具, 输出肯定都是英文, 就像是中国人写的组件包, 也是英文描述, 没办法, 国际化
vendor
composer.json
, composer.lock
json
格式composer init
composer.lock
,就安装这里面要求的包的版本composer.json
中的包,并创建composer.lock
,将安装好的包的版本等信息写入到composer.lock
中composer.json
是否有更新composer.lock
composer.json
,composer.locl
,vendor
的时候, 会全自动创建composer create-project laravel/laravel blogs
composer.json
中的”autoload”中的空间映射生效composer dump
使用composer编写框架是 1+2 结构,即:
一个目录'vendor'。
两个文件:'composer.json','composer.lock'。
进入https://packagist.org/ 搜索catfan/medoo
执行这段代码进行安装
安装成功
安装成功
composer.json文件中
"autoload": {
"psr-4": {
//控制器映射 controllers为目录名也是命名空间名 app/controllers为文件夹和目录名
"controllers\\": "app/controllers",
//模型
"models\\": "app/models",
//视图
"views\\": "app/views",
//核心,套壳的文件,下载的模型和视图让它继承,再让真正的视图和模型继承它
"core\\": "core"
}
},
更新文件后一定在命令行更新:Composer dump 进行更新
控制器:
<?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('jizhang',['id','jine','chengyuan','beizhu'],
['id[>=]'=>5, 'LIMIT'=>10]);
return $this->view->render('staffs/list', ['staffs' => $staffs]);
}
}
模型代码:
<?php
namespace models;
use core\Model;
//继承核心模型 也就是套壳的模型,套壳的模型继承下载的模型和视图方法
class StaffsModel extends Model
{
public function __construct()
{
parent::__construct();
}
}
视图代码:
<!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['jine']) ?></td>
<td><?= $this->e($staff['chengyuan']) ?></td>
<td><?= $this->e($staff['beizhu']) ?></td>
<td><button>编辑</button><button>删除</button></td>
</tr>
<?php endforeach ?>
</table>
</body>
</html>
模型
<?php
namespace core;
use Medoo\Medoo;
// 公共模型 核心,套壳的文件,下载的模型和视图让它继承,再让真正的视图和模型继承它
class Model extends Medoo
{
//构造方法 这里的方法参考catfan/medoo官方
public function __construct()
{
$options = [
'database_type' => 'mysql',
'database_name' => 'php',
'server' => 'localhost',
'username' => 'root',
'password' => '123456',
];
parent::__construct($options);
}
public function init()
{
}
}
视图
<?php
namespace core;
use League\Plates\Engine;
// 公共视图 核心,套壳的文件,下载的模型和视图让它继承,再让真正的视图和模型继承它
class View extends Engine
{
private $templates;
//传的参数代表模板路径
public function __construct($path)
{
$this->templates = parent::__construct($path);
}
}
首页代码 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();
最终效果:
总结:第一次接触框架,感觉跟mvc挺像,里面的关系还是比较乱,从头理下来会清楚一些,就是第三方的组件说明全是英文 用起来感觉会有些吃力