Composer 命令
composer 项目 1+2 结构
- 一个目录 :
vendor
- 二个文件:
composer.json
,composer.lock
composer.json
- 描述了当前项目所依赖的包/组件/类库和版本
json
格式- 交互式创建:
composer init
composer install
- 如果存在
composer.lock
,就安装这里面要求的包的版本 - 否则就安装
composer.json
中的包,并创建composer.lock
,将安装好的包的版本等信息写入到composer.lock
中
composer update
- 主要是检查
composer.json
是否有更新 - 如果有,就安装这个包,并将这个包的相关信息写入到
composer.lock
require
- 如果不存在
composer.json
,composer.locl
,vendor
的时候, 会全自动创建
create-project 创建项目
composer create-project laravel/laravel blogs
composer dump-autoload
- 将
composer.json
中的”autoload”中的空间映射生效 - 命令简写:
composer dump
第一步 安装Composer
使用composer编写框架是 1+2 结构,即:
一个目录'vendor'。
两个文件:'composer.json','composer.lock'。
安装完成后检测下是否安装成功
然后开始安装catfan/medoo
进入https://packagist.org/ 搜索catfan/medoo
执行这段代码进行安装
安装成功
开始安装league/plates
安装成功
自动加载器的映射
composer.json文件中
"autoload": {
"psr-4": {
//控制器映射 controllers为目录名也是命名空间名 app/controllers为文件夹和目录名
"controllers\\": "app/controllers",
//模型
"models\\": "app/models",
//视图
"views\\": "app/views",
//核心,套壳的文件,下载的模型和视图让它继承,再让真正的视图和模型继承它
"core\\": "core"
}
},
更新文件后一定在命令行更新:Composer dump 进行更新
安装完毕以后开始写控制器代码MVC
控制器:
<?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挺像,里面的关系还是比较乱,从头理下来会清楚一些,就是第三方的组件说明全是英文 用起来感觉会有些吃力