创建 Composer 包

可将创建的 代码模块 转化为 Composer 包,也可为 CodeIgniter 4 创建专属 Composer 包。

目录结构

以下是 Composer 包的标准目录结构:

your-package-name/
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── composer.json
├── src/
   └── YourClass.php
└── tests/
    └── YourClassTest.php

创建 composer.json

在包目录根路径下创建 composer.json 文件。此文件定义了包的元数据及其依赖项。

可使用 composer init 命令辅助创建。

例如,composer.json 可能如下所示:

{
    "name": "your-vendor/your-package",
    "description": "Your package description",
    "type": "library",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "YourVendor\\YourPackage\\": "src/"
        }
    },
    "authors": [
        {
            "name": "Your Name",
            "email": "yourname@example.com"
        }
    ],
    "require": {
        // 此处列出包所需的依赖项
    },
    "require-dev": {
        // 此处列出开发依赖项(如 PHPUnit)
    }
}

包名

name 字段至关重要。包名通常采用“vendor-name/package-name”格式且全部小写。常见示例如下:

  • your-vendor-name:标识供应商(包创建者)的名称,如个人姓名或组织名。

  • your-package-name:所创建包的名称。

因此,务必确保名称唯一,以便与其他包区分。在发布时,唯一性尤为重要。

命名空间

包名决定了 autoload.psr4 中的供应商命名空间。

如果包名为 your-vendor/your-package,则供应商命名空间必须为 YourVendor。编写方式如下:

"autoload": {
    "psr-4": {
        "YourVendor\\YourPackage\\": "src/"
    }
},

此设置指示 Composer 自动加载包的源代码。

选择授权协议

如不熟悉开源授权协议,请参阅 https://choosealicense.com/。包括 CodeIgniter 在内的许多 PHP 包都使用 MIT 协议。

准备开发工具

许多工具可协助确保代码质量,建议使用。通过 CodeIgniter DevKit 可轻松安装并配置此类工具。

安装 DevKit

在包根目录下运行以下命令:

composer config minimum-stability dev
composer config prefer-stable true
composer require --dev codeigniter4/devkit

DevKit 会安装各种有助于开发的 Composer 包,并在 vendor/codeigniter4/devkit/src/Template 中提供对应的模板。将该目录下的文件复制到项目根目录,并根据需求进行修改。

配置代码规范修复工具

DevKit 提供了基于 PHP-CS-Fixer 的代码规范修复工具,并遵循 CodeIgniter 代码规范

vendor/codeigniter4/devkit/src/Template/.php-cs-fixer.dist.php 复制到项目根目录。

创建用于存放缓存文件的 build 目录:

your-package-name/
├── .php-cs-fixer.dist.php
├── build/

使用编辑器打开 .php-cs-fixer.dist.php 并修正目录路径:

--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -7,7 +7,7 @@ use PhpCsFixer\Finder;
 $finder = Finder::create()
     ->files()
     ->in([
-        __DIR__ . '/app/',
+        __DIR__ . '/src/',
         __DIR__ . '/tests/',
     ])
     ->exclude([

配置完成。现在可运行代码规范修复工具:

vendor/bin/php-cs-fixer fix --ansi --verbose --diff

如果在 composer.json 中添加了 scripts.cs-fix,则可通过 composer cs-fix 命令运行:

{
    // ...
    },
    "scripts": {
        "cs-fix": "php-cs-fixer fix --ansi --verbose --diff"
    }
}

配置文件

允许用户覆盖设置

如果包中包含配置文件,且希望允许用户覆盖这些设置,请使用 config() 并传入短类名(如 config('YourConfig'))来调用该配置文件。

随后,用户只需在 app/Config 中放置一个同名短类名的配置类,并继承包的配置类(如 YourVendor\YourPackage\Config\YourConfig),即可覆盖包配置。

覆盖 app/Config 中的设置

如需覆盖或补充 app/Config 目录下的已知配置,可使用 隐式注册器

参考资料

官方已发布多个包。在创建自己的包时,可将这些包作为参考: