Blogger Information
Blog 33
fans 0
comment 0
visits 18708
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
composer常用操作
李玉峰
Original
993 people have browsed it

composer 与 mvc

1. 更实用的类自动加载器

  • 演示基于包的自动加载器: autoloader.php
  • composer 自动加载就是基于这个原理

2. composer

composer 是什么

  • composer 是 php 的一个依赖管理器,并非包管理器
  • 它只是基于某个项目,所有依赖安装到指定目录中vendor,而非全局

composer 工作流

  • 你有一个项目,依赖于若干库
  • 其实一些库,又依赖于其它库
  • 你只需要你所依赖的库
  • composer 会找出对应版本的包/库进行安装(下载到特定目录)

3. 下载与安装

windows

mac/linux

php 不可用时的解决方案

  1. # 执行官方安装命令
  2. curl -sS https://getcomposer.org/installer | php
  3. # 会失败,因为php程序找不到
  4. which php
  5. # 的确提示php找不到
  6. # 最新macos不再内置php,所以php命令不可用,需要手工设置php路径
  7. # 以MAMP为例,其它集成环境工作也是一样的
  8. # 通过查看得知MAMP Pro,php7.4路径
  9. # 打开~/.bash_profile并插入
  10. sudo vi ~/.bash_profile
  11. # 按i进入插入状态,并输入/或粘贴以下内容
  12. export PATH="/Applications/MAMP/bin/php/php7.4.21/bin:$PATH"
  13. #按 :wq 保存后退出
  14. # 执行一下 ~/.bash_profile
  15. source ~/.bash_profile
  16. # 再次查看php路径
  17. which php
  18. # 输出:/Applications/MAMP/bin/php/php7.4.21/bin/php 正确
  19. # 推荐使用别名链接
  20. php: aliased to /Applications/MAMP/bin/php/php7.4.21/bin/php -c "/Library/Application Support/appsolute/MAMP PRO/conf/php7.4.21.ini"
  21. composer: aliased to /Applications/MAMP/bin/php/composer
  22. # 如果你使用的MAMP, 在选择PHP版本时,将下面的active...also 二个全选上,将无视上面全部操作

下载安装 composer

  1. # 下载到当前项目中
  2. curl -sS https://getcomposer.org/installer | php
  3. # 执行完毕,会在当前项目目录中看到一个 composer.phar 文件, 这就是composer命令执行器
  4. # 目前composer只能用到当前项目中,且需要通过 composer.phar来执行
  5. # 为了简化composer的使用, 将composer.phar移动到全局,并简化为composer
  6. # macos中, 应该在命令前用 sudo 提升权限 ,否则拒绝访问
  7. sudo mv composer.phar /usr/local/bin/composer
  8. # 执行成功后, 当前项目目录中的composer.phar就没有了,被移动了
  9. # 这时,可查看一个composer版本,以确定简化命令composer可用
  10. # 从此不必再使用完整的compser.phar命令了,当然全称命令也失效了不能更用
  11. composer --version
  12. # Composer version 2.3.5 2022-04-13 16:43:00
  13. # 输入composer,可查看所有composer指令
  14. composer

设置国内镜像

composer 是从源址下载,而非 zip,而国外网站下载很慢且可能失败
因为推荐将下载源切到国内镜像地址
国内提供类似服务的镜像很多,大家常用的是阿里的, 原因不必说了

  1. # 直接在终端中输入以下命令即可,不会有任何输出,就对了
  2. composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  3. # 查看composer 所有全局配置项,可以看到像像源
  4. composer config -gl

4. composer.json

  • composer.json 是配置文件,也是 composer 的核心
  • 主要功能
    • 自动下载或加载第三方组件包以及依赖管理
    • 自动加载用户自定义包或函数库

创建

  • 直接在项目根目录中手工创建: composer.json
  • 使用composer init指令交互式创建

交互式创建会产生的许多元字段,主要用于发布包,而我们主要是使用包,所以手工创建它
注意, 打开终端工具后, 先进入到项目中,如不确定,可用 pwd 查看一下当前路径
使用composer init创建的composer.json大致这样

  1. {
  2. "name": "zhupeter/0505-1",
  3. "authors": [
  4. {
  5. "name": "zhupeter",
  6. "email": "zhuyuseng@qq.com"
  7. }
  8. ],
  9. "require": {}
  10. }

下面我们手工创建一个composer.josn

  1. {}

啥也不用写,为空即可, 执行以下命令

  1. # 切换到项目目录,如0505-1,输入以下指令
  2. composer dumpautoload
  3. # 输出: Generating autoload files 翻译: 生成自动加载器文件
  4. # 该指令主要用于创建或更新composer的自动加载器
  5. # 如果是第一次执行,你会看到在当前项目根目录下多出一个vendor目录
  6. # 该vendor目录下面有一个composer目录有一个autoloaded.php文件

自定义类的自动加载

composer.json内容如下:

  1. {
  2. "autoload": {
  3. "classmap": ["lib/", "src/", "app/Test1.php"]
  4. }
  5. }

终端执行: composer dmupautoload将指定目录下的类或指定的类文件注册到 compser 中
所谓类注册,就是写到`vendor/composer/autoload_classmap.php类映射文件中
特别注意: lib,src 目录, app/Test1.php 必须是类文件才有效,其它非类文件使用”files”字段注册

自定义的其它非类文件的加载

自加加载数据库配置和公共函数库文件
composer.json文件如下:

  1. {
  2. "autoload": {
  3. "classmap": ["lib/", "src/", "app/Test1.php"],
  4. "files": ["config/database.php", "func/helper.php"]
  5. }
  6. }

执行: composer dumpautolaod,查看文件注册器:vendor/composer/autoload_files.php
可以看到,已正确注册成功

PSR-4 自动加载

  • PSR:(Standard Recommendations)PHP 推荐标标准的简写,由 PHP FIG 组织制定的 PHP 开发规范
  • PSR 的规范很多, 大家感兴趣, 可翻阅相关资料, 这里重点讲一个自动加载相关的PSR-4
  • PSR-4: 类命名空间可到映射到类文件所在的路径,要求类名与类文件同名,且文件中只有一个类
  • 所以在 PSR-4 字段中,只需要定义一个空间起点即可, 剩下的通过子空间映射到子目录中即可
  1. {
  2. "autoload": {
  3. "classmap": ["lib/", "src/", "app/Test1.php"],
  4. "files": ["config/database.php", "func/helper.php"],
  5. "psr-4": {
  6. "admin\\": "admin/"
  7. }
  8. }
  9. }
  • “admin\“是命名空间, 对应的值”admin/“是映射到的目录
  • “admin\“是顶层命名空间, 可看成空间查询的起点,后面还可有admin\controller\...
  1. // 如果composer.json : psr-4是: "admin\\": "admin/"
  2. namespace admin
  3. // 命名空间: admin
  4. // 则在admin目录下查找到User1类
  5. class User1
  6. {
  7. //...
  8. }
  9. // 访问方式
  10. admin\User;
  11. // 如果类文件是
  12. namespace admin\controller;
  13. // 命名空间: admin\controller
  14. // 则在admin/controller目录下查找到User2类
  15. class User2
  16. {
  17. //...
  18. }
  19. // 访问方式: 子空间
  20. admin\controller\User

使用第三方组件库/包

  • 组件外查询与下载平台: https://packagist.org/, 类似手机上的应用商店
  • 这上面有很多优秀的第三方 php 包,可以直接引用到自己的项目中
  • 引用方式有二种

    • composer.json添加require字段, 用composer install下载安装该包
    • 直接在终端使用指令composer require 包安装该包,并更新composer.json
  • 手工安装一个包: 验证码包 yangyezi/captcha
    composer.json

  1. "require": {
  2. "youngyezi/captcha": "6.0.*"
  3. }
  4. ```

终端执行composer install, 将会自动下载 captcha
观察 vendor 目录,会发现除了 captcha 目录外,还有许多其它目录和文件,这就是该包的依赖,也一并下载安装了
同时,还创建一个叫composer.lock的配置锁文件,将当前版本锁定,这样大家都可以得到一个一致的开发环境

  • 自动安装一个常用的数据库模型包:

    • 终端指令: composer require catfan/medoo
    • 观察vendor目录查看该包文件
    • 打开composer.json观察require字段
    • 打开composer.lock观察该包的版本号
  • 下面演示一下,如何使用第三方的组件包

  • 还有一种,可以直接从第三方包,创建一个本地项目,用 thinkphp,laravel 等框架

  • 在包列表中搜索 thinkphp: https://packagist.org/?query=thinkphp
  • 会看到二个相关的,二者使用的命令并不相同
    • topthink/think:
      • composer create-project topthink/think
      • 专用于创建基于composer的项目,只要一个包名,就可以根据这个包创建一个完整项目
      • 相当于执行git clone后, 再将这个包依赖安装到vendor目录
      • 不仅下载第三方包,还会创建相关目录和配置,并全部放到指定目录下
      • 可以快速的部署你的项目
      • 多人开发项目, 并用它来快速初始化项目
    • topthink/frameword:
      • composer require topthink/framework
      • 只在 vendor 中安装指定的包,通常用于更新核心文件

实战:安装ThinkPHP框架

  1. # 安装thinkphp框架,并创建一个项目: blog,即将整个框架安装到blog项目目录中
  2. # 默认安装最新稳定版
  3. composer create-project topthink/think blog
  4. # 测试一下,访问 blog/public/index.php,看到欢迎页面, 表示tp项目安装成功
  5. # 可以创建项目时,指定基于composer包的版本号,如5.0
  6. composer create-project topthink/think blog 5.0.*
  7. # 如果只使用composer require topthink/framework,则不会创建blog目录以及内部目录和文件
  8. # 大家课后可以测试一下

其它常用的指令

  • 更新 composer 到最新版本: composer selfupdate
  • 更新所有包或指定的包: composer update 空/*/包名列表空格分隔
  • 移除包: composer remove 包
  • 查看所有包: composer show
  • 查看指令帮助信息: composer help install
  • 更多指令: composer回车后可以看到
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
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