博客列表 >利用 composer 快速搭建一个框架

利用 composer 快速搭建一个框架

我是郭富城
我是郭富城原创
2020年05月20日 07:23:321331浏览

利用 composer 快速搭建一个框架

Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年。FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和强健的体魄后,提出了 PSR-0 到 PSR-4 五套 PHP 非官方规范:

  1. PSR-0 (Autoloading Standard) 自动加载标准

  2. PSR-1 (Basic Coding Standard) 基础编码标准

  3. PSR-2 (Coding Style Guide) 编码风格向导

  4. PSR-3 (Logger Interface) 日志接口

  5. PSR-4 (Improved Autoloading) 自动加载优化标准

1. 命令解释

1.1 初始化

  • composer init,按照提示一步一步操作,首先是包名,描述,作者,附加信息,包的内容,协议(是否免费),是否需要安装依赖,是否需要开发者的依赖
  1. PS C:\Users\admin\Desktop\php11\PHP\5.18> composer init
  2. Welcome to the Composer config generator
  3. This command will guide you through creating your composer.json config.
  4. Package name (<vendor>/<name>) [admin/5.18]: nicola/php
  5. Description []: 这是我的第一个框架开发,希望一切顺利
  6. Author [, n to skip]: nicola <1228994040@qq.com>
  7. Minimum Stability []:
  8. Package Type (e.g. library, project, metapackage, composer-plugin) []: library
  9. License []: MIT
  10. Define your dependencies.
  11. Would you like to define your dependencies (require) interactively [yes]? no
  12. Would you like to define your dev dependencies (require-dev) interactively [yes]? no
  13. {
  14. "name": "nicola/php",
  15. "type": "library",
  16. "license": "MIT",
  17. "authors": [
  18. {
  19. "name": "nicola",
  20. "email": "1228994040@qq.com"
  21. }
  22. ],
  23. "require": {}
  24. }
  25. Do you confirm generation [yes]? yes

1.2 依赖安装

  • composer install:从当前目录读取 composer.lock 文件,处理依赖关系,并安装到 vendor 目录下。如果没有这个文件,就安装 json 的包,并创建 lock

1.3 依赖更新

  • composer update:获取依赖的最新版本,升级更新 composer.json 文件;并将这些包的信息写入到 lock 文件

1.4 申明依赖

  • require命令增加新的依赖包到当前目录的 composer.json 文件中,生成 vender 文件和 lock

1.5 创建项目

  • composer create-project laravel/laravel,在当前目录下创建一个项目,命令后面可以增加自定义的目录,例如composer create-project laravel/laravel blogs

1.6 生成类库映射文件

  • composer dump-autoload当修改项目下的 composer.json 的文件,并不一定要运行 composer update 命令进行更新,有的时候可以使用该命令来更新加载器,比如要引用本地自定义的包(不是来自于 packagist)。
  1. {
  2. "autoload": {
  3. "psr-4": {
  4. "controllers\\": "app/controllers"
  5. }
  6. }
  7. }

命令简写composer dump

2. 快速搭建一个框架

  • 框架,就是遵照一定的规范(PHP-FIG),借助他人的轮子,实现快速业务,安全等附加价值。
  • 基础准备,创建文件 composer.json 内容如下,进入项目目录下 然后 composer update 或者 composer installe,这样会自动加载 autoload 组件。

    注意composer.json只能用双引号!

2.1 设计 MVC

  • 规划文件夹,在 app 中创建 controllers、models、views 三个文件夹,开始正式踏上 MVC 的征程。

测试控制器

  1. <?php
  2. //命名空间,包名称
  3. namespace controllers;
  4. class StaffsController
  5. {
  6. public function index()
  7. {
  8. return 'Hello,Nicola,php.cn';
  9. }
  10. }
  • 访问入口文件测试是否成功
  1. <?php
  2. require 'app/controllers/StaffsController.php';
  3. use controllers\StaffsController;
  4. //控制器已经测试好了
  5. echo (new StaffsController)->index();
  6. echo '<hr>';

测试模型

  1. <?php
  2. namespace models;
  3. class StaffsModel
  4. {
  5. public function index()
  6. {
  7. return 'nicola';
  8. }
  9. }
  • 访问入口文件测试是否成功
  1. <?php
  2. require 'vendor/autoload.php';
  3. use controllers\StaffsController;
  4. use models\StaffsModel;
  5. //控制器已经测试好了
  6. echo (new StaffsController)->index();
  7. echo '<hr>';
  8. //测试模型
  9. echo (new StaffsModel)->index();
  10. echo '<hr>';

测试视图

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>员工管理系统</title>
  7. </head>
  8. <body>
  9. <h3>员工管理系统</h3>
  10. </body>
  11. </html>
  • 访问入口文件测试是否成功
  1. <?php
  2. require 'vendor/autoload.php';
  3. use controllers\StaffsController;
  4. use core\View;
  5. use models\StaffsModel;
  6. //控制器已经测试好了
  7. echo (new StaffsController)->index();
  8. echo '<hr>';
  9. //测试模型
  10. echo (new StaffsModel)->index();
  11. echo '<hr>';
  12. //视图
  13. echo (new StaffsController)->display();

类库映射composer dump-autoload

  • 遵循 psr-4 约定,当前命名空间和当前类所在的文件路径是一一对应的,上面的每一步都需要执行composer dump-autoload,让其读取自动加载生效!(关键!关键!关键!)
  1. {
  2. "autoload": {
  3. "psr-4": {
  4. "controllers\\": "app/controllers",
  5. "models\\": "app/models",
  6. "views\\": "app/views",
  7. "core\\": "core"
  8. }
  9. }
  10. }

2.2 引入第三方的模型,视图和组件

模型组件 Medoo

  • 申明依赖安装composer require catfan/medoo

视图组件 plates

  • 申明依赖安装composer require league/plates

熟悉所加载第三方组件的技术文档

  • 用别人的东西,第一需要看作者的使用说明书,一般组件都会有相应的说明,或者是官网,作者会介绍具体如何使用。

继承思想,创建核心类库

  • 模型和视图需要做成公共类库
  • 公共模型,将模型文件直接继承 medoo,然后再调一下父类的初始化方法,在这里须要有一些参数 ,这些参数我们可以通过前面的配置文件来将它直接加载进去。观看官方文档看如何初始化这个类,我们可以直接复制过来进行使用例如:
  1. <?php
  2. namespace core;
  3. use Medoo\Medoo;
  4. //公共模型
  5. class Model extends Medoo
  6. {
  7. //构造方法
  8. public function __construct()
  9. {
  10. $options = [
  11. 'database_type' => 'mysql',
  12. 'database_name' => 'php',
  13. 'server' => 'localhost',
  14. 'username' => 'root',
  15. 'password' => 'root123456'
  16. ];
  17. parent::__construct($options);
  18. }
  19. }
  • 在控制器中初始化 model 类,看一下控制器中是否将模型 use 进去,然后将初始化的 model 类放入一个变量当中,然后输出看看是否能输出数据库的信息,如果有说明链接成功了

    如果有报错,记得检查是否已经处理类库映射

  • 公共视图,与公共模型同样的操作过程
  1. <?php
  2. namespace core;
  3. use League\Plates\Engine;
  4. //公共视图
  5. class View extends Engine
  6. {
  7. private $templates;
  8. public function __construct($path)
  9. {
  10. $this->$templates = parent::__construct($path);
  11. }
  12. }

  • 控制器调用
  1. <?php
  2. //命名空间,包名称
  3. namespace controllers;
  4. class StaffsController
  5. {
  6. public $model;
  7. public $view;
  8. public function __construct($model, $view)
  9. {
  10. $this->model = $model;
  11. $this->view = $view;
  12. }
  13. public function index()
  14. {
  15. return 'Hello,Nicola,php.cn';
  16. }
  17. public function display()
  18. {
  19. include 'app/views/staffs/list.php';
  20. }
  21. public function select()
  22. {
  23. $staffs = $this->model->select('staffs', ['id', 'name', 'position', 'mobile'], ['id[>=]' => 5, 'LIMIT' => 10]);
  24. return $this->view->render('staffs/list', ['staffs' => $staffs]);
  25. }
  26. }

测试框架

  1. <?php
  2. require 'vendor/autoload.php';
  3. use controllers\StaffsController;
  4. use core\View;
  5. use models\StaffsModel;
  6. // 模型处理
  7. $model = new StaffsModel();
  8. // var_dump($model);
  9. //视图
  10. $view = new View('app/views');
  11. // var_dump($view);
  12. //查询
  13. $controller = new StaffsController($model, $view);
  14. // var_dump($controller);
  15. echo $controller->select();

3. 总结

Composer 就是 PHP 框架的未来,框架是为了提升我们的应用开发效率。PHP 语言本身就带有强大的网络功能、文件管理功能和丰富的系统 API,Composer 也只是一段 PHP 脚本而已。从使用框架是为了提高开发效率的角度来看,框架的本质就是路由。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议