首页 > 编程笔记 > PHP笔记 阅读:27

PHP Composer安装和使用教程(新手必看)

在实现 MVC 设计模式时,需要手动加载文件,开发效率低,并且在实际项目开发中,还需要给项目添加依赖,从而扩展项目的功能。为此,本节将在自定义框架中使用 Composer 管理项目,实现自动加载和管理项目依赖。

安装Composer

Composer 是 PHP 项目中用于管理项目依赖(dependency)的工具。开发人员在项目中声明依赖的外部工具库,Composer 就会自动安装这些工具库依赖的库文件。

大多数 PHP 框架都支持使用 Composer 管理项目依赖。Composer 还为项目实现了自动加载。

在 Composer 的官方网站可以下载 Composer。在 Windows 中安装 Composer 的方式有两种,一种是使用安装程序安装,另一种是使用命令行安装。

这里选择使用安装程序安装,具体安装步骤如下:
① 在 Composer 的官方网站下载 Composer-Setup.exe,下载后双击文件图标启动安装程序,选择推荐的安装模式。

② 安装程序提示选择是否使用开发者模式(Developer mode),若选中此项,则不提供卸载功能,推荐不选中。

③ 安装过程提示选择 PHP 命令行程序时,单击“Browse…”按钮浏览文件,选择 C:\web\php8.2\php.exe。

④ 进入填写代理服务器界面后,选择不使用代理,单击“Next”按钮。

⑤ 进入准备安装界面,单击“Install”按钮进行安装。

Composer 安装成功后,会自动添加环境变量。在系统变量 Path 中添加的路径如下:
C:\web\php8.2
C:\ProgramData\ComposerSetup\bin
在上述路径中,“C:\web\php8.2”是 PHP 的安装目录,“C:\ProgramData\ComposerSetup\bin”是 Composer 的可执行文件目录。

在用户变量 Path 中添加的路径如下:
//全局依赖包的可执行文件目录
C:\Users\用户名\AppData\Roaming\Composer\vendor\bin
上述路径表示全局依赖包的可执行文件目录。

⑥ 打开新的命令提示符窗口,执行“composer”命令测试 Composer 是否安装成功,如果看到下面的结果,说明 Composer 安装成功。
______
  / ____/___  ____ ___  ____  ____  ________  _____
/ /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.5.5……

使用Composer实现自动加载

虽然 PHP 提供了自动加载机制,但是要在项目中实现自动加载功能还需要手动编写代码,操作起来相对复杂。

为了使开发更简单,可以在 myframe.test 项目中使用 Composer 实现类的自动加载,具体步骤如下:
① 在 C:\web\www\myframe 目录下创建 composer.json 文件,具体代码如下:
{
    "autoload": {
        "psr-4": {"App\\": "app/"}
    }
}
在上述代码中,“autoload”表示使用自动加载,“psr-4”表示自动加载的类文件要遵循 PSR-4 的要求,“App\\”表示 App 命名空间,“app/”表示 app 目录。

此处的配置表示将 App 命名空间映射给 app 目录,当需要加载 App 命名空间中的类时,到 app 目录中查找类文件,App 命名空间中的子命名空间将会映射为 app 目录下的子目录。

例如,当需要自动加载 App\Http\Controllers\StudentController 类时,加载的类文件路径为 app\Http\Controllers\StudentController.php。

② 在命令提示符窗口中切换到 composer.json 文件所在目录中,执行 composer install 命令安装依赖关系所需组件,并初始化自动加载信息。

命令执行完成后,输出结果如下:
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
完成上述操作后,会在当前目录下生成一个 vendor 目录,其目录结构如下图所示:


图 1 vendor 目录结构

在项目中直接引入 vendor\autoload.php 文件就可以实现自动加载,实现自动加载功能的具体代码都保存在 vendor\composer 目录中。

需要注意的是,vendor\composer 目录中的文件都是由 Composer 自动生成的,不推荐开发人员修改里面的代码。

③ 重新编写 public\index.php 文件,引入 vendor\autoload.php 文件实现自动加载,具体代码如下:
<?php
require '../vendor/autoload.php';

④ 为了和 Laravel 框架的模型文件的命名方式保持一致,将原有的模型文件 app\StudentModel.php 路径改为 app\Models\Student.php。然后修改 app\Models\Student.php 文件,将命名空间放在 App 下,并修改类名,具体代码如下:
<?php
namespace App\Models;   // 将命名空间放在App\Models下

use MySQLi;              // 在定义命名空间后,需要导入根命名空间下的类

class Student            // 将模型的类名StudentModel修改为Student
……(原有代码)
在上述代码中,第 2 行代码定义了命名空间,构造方法中的 MySQLi 类在根命名空间下,第4行代码导入了 MySQLi 命名空间。

⑤ 将原有的 app\StudentController.php 文件放入 app\Http\Controllers 目录中,在文件中导入命名空间,具体代码如下:
<?php
namespace App\Http\Controllers;

use App\Models\Student;

class StudentController
{
    public function index()
    {
        $student = new Student();
        $data = $student->getAll();
        require VIEW_PATH . 'student.php';
    }
}
在上述代码中,第 4 行代码用于导入 Student 模型的命名空间。

⑥ 将原有的视图文件 views\student.php 移动到 resources\views 目录中。

⑦ 修改 public\index.php 文件,定义路由规则,根据路由找到对应的控制器名和方法名,具体代码如下:
<?php
require '../vendor/autoload.php';
// 定义视图文件的路径常量
define('VIEW_PATH', '../resources/views/');
// 获取PATH_INFO
$pathinfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
// 定义路由规则
$route = [
    'student' => 'StudentController/index'
];
// 根据路由找到对应的控制器名和方法名
$pathinfo = trim($pathinfo, '/');
if (isset($route[$pathinfo])) {
    $pathinfo = $route[$pathinfo];
    list($controller, $action) = explode('/', $pathinfo);
} else {
    $arr = explode('/', $pathinfo);
    if (!isset($arr[1])) {
        exit('请求信息有误。');
    }
    $controller = ucwords($arr[0]) . 'Controller';
    $action = $arr[1];
}
// 拼接出完整的命名空间
$controller = '\\App\\Http\\Controllers\\' . $controller;
// 创建控制器,调用控制器中的方法
$obj = new $controller();
$obj->$action();
完成上述代码后,通过浏览器访问 http://www.myframe.test/student,如果输出了学生列表,说明已经通过 Composer 实现了类的自动加载。

使用Composer管理项目依赖

在以前的开发中,如果在项目中使用了某个类库,需要手动下载这个类库的文件,并在代码中引入类库后才能使用。这种方式不仅麻烦,而且当类库的版本更新后,还需要重新下载类库。如果一个类库又依赖于另一个类库,这种层叠的依赖关系会让项目的维护变得复杂并且低效。

为了解决手动下载类库这个问题,Composer 提供了项目依赖管理功能,它可以自动完成依赖包的下载和安装,并通过命名空间自动引入。

Composer 通过 packagist 资源库获取依赖包。在 packagist 资源库中,依赖包的命名方式为“用户名/包名”。例如“naux/auto-correct”包能够在中文和英文之间添加空格,并纠正专用名词的大小写。

安装依赖包的方式有两种:
通常情况下,一个包会有多个版本,指定版本号有多种方式,具体如下表所示:

表:指定版本号的方式
名称 实例 描述
特定的版本 3.1.33 包的版本是 3.1.33
某个范围的版本 ~1.0 包的版本大于等于 1.0 且小于 1.1
^1.0 包的版本大于等于 1.0 且小于 2.0
>=3.1 包的版本大于等于 3.1
>=2.6,<3.0 包的版本大于等于 2.6 且小于 3.0
>=2.6,<3.0|>=3.1 包的版本大于等于 2.6 且小于 3.0,或大于等于 3.1
通配符方式 3.1.* 与>=3.1,<3.2 等价


下面以“naux/auto-correct”包为例,演示使用 Composer 管理项目依赖,具体步骤如下:
① 安装依赖包需要开启 zip 扩展,打开 PHP 配置文件 php.ini,搜索“zip”找到 zip 扩展的配置项,将配置项前面的注释去掉,修改后的配置如下:
extension=zip

② 重启 Apache 服务使修改后的配置生效。

③ 在命令提示符窗口中,切换到 C:\web\www\myframe 目录,执行如下命令安装依赖包:
composer require naux/auto-correct=1.0.3
在上述命令中,naux/auto-correct 表示要加载的包名,包名后面的“=”用于指定版本号,“1.0.3”是版本号。

安装依赖包后,打开 composer.json 文件,会看到里面自动添加了如下代码:
"require": {
    "naux/auto-correct": "1.0.3"
}
打开 vendor 目录,会看到里面新增了 naux 目录,使用 Composer 下载的依赖包代码就保存在该目录中。

④ 在 app\Http\Controllers\StudentController.php 中导入命名空间,具体如下所示:
use Naux\AutoCorrect;

⑤ 导入命名空间后,编写 test() 方法,具体代码如下:
public function test()
{
    $correct = new AutoCorrect;
    // 在中文和英文之间添加空格
    echo $correct->auto_space('《php快速入门教程》');
    // 纠正专用词汇的大小写
    echo $correct->auto_correct('《php快速入门教程》');
}

⑥ 通过浏览器访问 http://www.myframe.test/student/test,输出结果如下:

《php快速入门教程》
《PHP快速入门教程》

从上述输出结果可以看出,第 1 行的 php 字符前后添加了空格,第 2 行的 php 被转换成了 PHP。

如需卸载依赖包,可以使用如下命令:
composer remove naux/auto-correct
上述命令执行后,会将 naux/auto-correct 在 composer.json 中的依赖配置删除,并且会删除 vendor 目录中该依赖包的相关文件。

通过上述操作可以看出,使用 Composer 管理项目依赖非常方便,只需执行命令安装需要使用的依赖包,在代码中导入命名空间即可。

相关文章