批改状态:合格
老师批语:第一次接触命令行是这样的
一、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这几节课要听十次以上,估计才能懂。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号