Blogger Information
Blog 43
fans 1
comment 0
visits 33948
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
使用Composer编写一个MVC小框架
蔚蓝世纪
Original
928 people have browsed it

使用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.基础扎实是王道,地基打好了,上层建筑才能稳定牢固。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:想一下没有composer的时代, 咱们程序员一样写代码, 但是有了这个家伙会更方便, 所以要正确认知composer这个生产力工具, 不要觉得太神秘
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post