博客列表 >使用Composer编写一个MVC小框架

使用Composer编写一个MVC小框架

蔚蓝世纪
蔚蓝世纪原创
2020年05月20日 09:11:50927浏览

使用composer编写框架比较便捷,注意做到 1+2 结构,即:

  1. 一个目录'vendor'
  2. 两个文件:'composer.json','composer.lock'

一、什么是“composer.json”?

composer.json 是使用‘json’格式来描述了当前项目所依赖的包、组件、类库和版本。

二、“composer.json”创建方式

1.交互式创建:’composer init’(在当前项目所在的目录下执行)。

  1. PS D:\phpstudy_pro\WWW\php11\php> cd 0518//切换当前项目所在的目录
  2. PS D:\phpstudy_pro\WWW\php11\php\0518> composer init//执行'composer init'命令
  3. Welcome to the Composer config generator
  4. This command will guide you through creating your composer.json config.//欢迎语句
  5. Package name (<vendor>/<name>) [administrator/0518]: php/edu //创建我的包的名称(命名规则为:“字符串/字符串”)
  6. Description []: php chinese web //用几个关键字描述我创建的包
  7. Author [, n to skip]: Peter Zhu <154780847@qq.com>//作者的姓名和邮箱
  8. Minimum Stability []: //是否定义其他信息,否则直接回车
  9. Package Type (e.g. library, project, metapackage, composer-plugin) []:library//描述我创建的包的类型,是库?是组件?还是插件?等等
  10. License []: MIT//问我要一个协议,意思是我创建的包是免费的?还是收费的?是公有的?还是私有的?等等
  11. Define your dependencies.//定义您的依赖项。
  12. Would you like to define your dependencies (require) interactively [yes]? no //您想交互式地定义您的依赖项(要求)[是]吗?有yes和no两个选项。no是不安装,yes则会打开搜索让我们选择需要定义的依赖项。
  13. Would you like to define your dev dependencies (require-dev) interactively [yes]? no //您想交互式地定义您的dev(开发者)依赖项(require-dev)[是]吗?no //同上。
  14. {
  15. "name": "php/edu",
  16. "description": "php chinese web",
  17. "type": "library",
  18. "license": "MIT",
  19. "authors": [
  20. {
  21. "name": "Peter Zhu",
  22. "email": "154780847@qq.com"
  23. }
  24. ],
  25. "require": {}
  26. } //这是一个典型的'json'格式
  27. Do you confirm generation [yes]? yes //让我们确认所要创建的包的信息
  28. PS D:\phpstudy_pro\WWW\php11\php\0518>//这时候,我们已经在0518这个目录下面创建了一个名字为“composer.json”的json文件。


生成的json文件的基本信息和我们终端工作台生成的预览一模一样。

2.利用”require”命令执行”composer install”自动创建

  1. {
  2. "name": "php/edu",
  3. "description": "php chinese web",
  4. "type": "library",
  5. "license": "MIT",
  6. "authors": [
  7. {
  8. "name": "Peter Zhu",
  9. "email": "154780847@qq.com"
  10. }
  11. ],
  12. "require": {"components/jquery":"^3.51"//在此处指定我们想要安装的包的名称,如果我们不记名称的话,可以到packagist.org网站搜索}
  13. }
  14. 在终端输入命令:
  15. PS D:\phpstudy_pro\WWW\php11\php\0518> composer install
  16. 扫描json文件,先进行更新,再进行安装.
  17. Loading composer repositories with package information
  18. Updating dependencies (including require-dev)
  19. Package operations: 1 install, 0 updates, 0 removals
  20. - Installing components/jquery (3.5.1): Downloading (100%)
  21. Writing lock file
  22. Generating autoload files //安装成功,这时会在0518目录下自动创建一个名字叫做"vendor"的目录,将我们所安装的包保存在"vendor"目录下。同时0518目录下生成一个叫做“composer.lock”的锁定文件,这个文件会将我们使用jquery 包的版本锁定在3.5.1版本。锁定版本的好处是,如果你把“composer.json”和“composer.lock”两个文件同时复制到别的电脑上使用时,可以保证版本的一致性。

如果我们的“composer.json”文件被更新了,那么我们接着在require文件里面输入包的名称和版本。

  1. "require": {
  2. "components/jquery": "^3.5",
  3. "twbs/bootstrap": "^4.5"
  4. }
  5. }
  6. PS D:\phpstudy_pro\WWW\php11\php\0518>composer update//在终端工作台输入更新命令
  7. Loading composer repositories with package information
  8. Updating dependencies (including require-dev)
  9. Package operations: 1 install, 0 updates, 0 removals
  10. - Installing components/jquery (3.5.1): Downloading (100%)
  11. Writing lock file
  12. Generating autoload files
  13. PS D:\phpstudy_pro\WWW\php11\php\0518> composer update
  14. Loading composer repositories with package information
  15. Updating dependencies (including require-dev)
  16. Package operations: 1 install, 0 updates, 0 removals
  17. - Installing twbs/bootstrap (v4.5.0): Downloading (100%)
  18. Writing lock file
  19. Generating autoload files
  20. 1 package you are using is looking for funding.
  21. Use the `composer fund` command to find out more!//更新文件并锁定版本信息到“composer.lock”文件中

三、composer常用命令行

  1. 如果不存在"composer.json","composer.lock""vendor",那么我们可以在终端工作台输入命令"composer require +包名称"并执行,这样就会在0518目录下自动创建三个文件。
  2. 在终端工作台输入命令"composer",可以查看composer各命令的功能。
  3. 在终端工作台输入命令"composer -V",可以查看composer的版本信息。
  4. 在终端工作台输入命令"composer selfupdate",可以在线升级composer
  5. 在终端工作台输入命令"composer show",可以查看composer中安装了哪些包。
  6. 在终端工作台输入命令"composer show + 包的名称",可以查看该包的详细配置信息。
  7. 在终端工作台输入命令"composer create-project + 包的名称",可以在当前目录下创建该项目。

四、使用composer编写一个小框架

1.在当前项目根目录下创建”app”文件夹。
2.在”app”文件夹下分别创建”controllers”、”models”、”views”三个文件夹。
3.在项目根目录下创建”composer.json”文件。同时”vendor”文件夹也被自动创建出来。注意:这里在终端控制台运行”composer install”和”composer update”命令均不会在项目根目录下自动创建”composer.lock”文件。
4.在项目根目录下新建”index.php”文件。
5.将”autoload”字段加载进”index.php”文件。

  1. {
  2. "autoload": {
  3. "psr-4": {//当前的命名空间和当前的类形成一一对应的映射关系
  4. "controllers\\": "app/controllers"
  5. }
  6. }
  7. }

6.在终端工作台输入命令”composer dump-autoload”,将’composer.json’中的”autoload”中的空间映射生效
7.在”index.php”文件中导入”vendor”文件夹里面的”autoload.php”文件。
8.在controllers文件夹中创建StaffsController.php文件,在models文件夹中创建StaffsModel.php文件,并分别创建类文件。
9.首先对控制器进行测试打印echo (new StaffsController)->index()
10.再对模型进行测试打印
echo (new StaffsModel)->index();
11.创建”views/staffs/list.php”文件,并通过’composer.json’文件映射加载进”index.php”文件。
12.在终端工作台通过输入”composer require catfan/medoo”命令引入第三方模型组件medoo。
13.在终端工作台通过输入”composer require league/plates”命令引入第三方视图组件plates。
14.写控制器,框架一般都需要一个核心类目,在项目根目录下创建core文件夹,并在core文件下创建公共模型”Model.php”和公共视图”View.php”文件。
15.在’composer.json’文件中对”core”文件内的公共模型和公共视图做接口映射。
16.将Medoo的数据扩展给Model,将Plates\Engine的数据扩展给View。
17.在控制器中查询数据库内容。
18.在app/views/staffs/list.php文件中使用foreach遍历数据库中的数据。
19.在浏览器中预览效果

五、总结

1.composer虽然用起来方便,可以减少程序员编写代码的时间,但是对于其中的映射、扩展、继承等各种数据之间的关系,一定要做到条理清晰,否则易出现错误。
2.学习单个命令工具并不难,难得是怎样组合安装,不仅不能出错,还要精致美观。
3.基础扎实是王道,地基打好了,上层建筑才能稳定牢固。

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