Facade门面类-composer常用指令-自动加载器使用
熟悉composer常用指令,会安装组件,并理解自动加载器的使用方式与更新方法
1. 新建 0303 目录,子目录 mvc 创建文件 model.php, view.php, controller.php
- model.php 模型类,获取数据
namespace mvc_demo;
use PDO;
// 模型类
class Model
{
// 获取数据
public function getData()
{
$pdo = new PDO('mysql:host=localhost;dbname=phpedu;charset=utf8mb4', 'root', 'root', array(
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
));
$sql = "SELECT id, name, gender FROM staffs limit 5";
return $pdo->query($sql);
}
}
- view.php 视图类,展示数据
namespace mvc_demo;
// 视图类
class View
{
// 数据展示
public function fetch($datas)
{
$res = '';
foreach ($datas as $data) {
$res .= print_r($data, true) . '<br>';
}
return $res;
}
}
- controller.php 控制器,渲染数据
namespace mvc_demo;
use Closure;
// 加载模型
require 'model.php';
// 加载视图
require 'view.php';
// 服务容器
class Container
{
// 对象容器
protected $instances = [];
// 添加容器
public function bind($alias, Closure $process)
{
$this->instances[$alias] = $process;
}
// 取出对象
public function make($alias, $params = [])
{
return call_user_func_array($this->instances[$alias], $params);
}
}
// 门面类,普通方法静态化
class Facade
{
// 容器属性
protected static $container = null;
// 容器静态方法
public static function initilize(Container $container)
{
static::$container = $container;
}
}
// 模型类访问静态化
class StaffsModel extends Facade
{
public static function getData()
{
return static::$container->make('model')->getData();
}
}
// 视图类访问静态化
class StaffsView extends Facade
{
public static function fetch($datas)
{
return static::$container->make('view')->fetch($datas);
}
}
// 控制器,工作类
class Controller
{
public function __construct(Container $container)
{
Facade::initilize($container);
}
public function index()
{
// 获取数据
$datas = StaffsModel::getData();
// 渲染数据
return StaffsView::fetch($datas);
}
}
// 依赖的对象添加到容器中
$container = new Container();
$container->bind('model', function () {
return new Model();
});
$container->bind('view', function () {
return new View();
});
// 实例化控制器,显示数据
$controller = new Controller($container);
echo $controller->index();
2. 熟悉composer常用指令,会安装组件,并理解自动加载器的使用方式与更新方法
2.1 composer常用指令
命令 | 描述 |
---|---|
composer init | 交互创建composer.json |
composer selfupdate | composer更新到最新 |
composer install | 安装 composer.json 中 require 声明的依赖包,文件内容可以是 {} |
composer require | 安装包写入 composer.json 的 require 中 |
composer create-project | 创建项目 |
composer update | 忽略锁文件 composer.lock 更新 composer.json 中的依赖包 |
composer search | 搜索包( https://packagist.org ) |
composer config | 配置 composer (镜像源) |
composer dump | 更新 composer.json 中 autoload 配置项 |
composer help update | 命令帮助 |
composer list | 命令列表 |
composer -V | 查看版本号 |
2.2 安装组件,理解自动加载器的使用与更新
下载 getcomposer.org/composer.phar 移至 php.exe 所在目录
同目录下创建批处理 composer.bat 添加内容
@php "%~dp0composer.phar" %*
保存将 php.exe 所在目录添加到系统
环境变量
中配置案例云镜像源,打开 cmd 输入命令
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
vscode 中,0303 目录创建 composer.json 内容为
{}
,打开终端,进入 0303 目录,输入composer -install
- 安装组件
composer search captcha
搜索验证码组件,执行composer require gregwar/captcha
安装组件
- 自动加载,将 controller.php 的 Container 类中
require 'model.php'
和require 'view.php'
注释,引入 vendor 自动加载文件require dirname(__DIR__) .'/vendor/autoload.php'
- 修改 composer.json 内添加,类名映射到目录
"autoload": {
"classmap": ["mvc"]
},
- 或者改为 psr-4 标准,空间名映射到目录
"psr-4": {
"mvc_demo\\": "mvc"
}
- 自动加载更新,终端运行
composer dump
- 运行 mvc 目录下的 controller.php 已实现自动加载