PSR-4 自动加载如何在 composer 中为自定义库工作?

Posted

技术标签:

【中文标题】PSR-4 自动加载如何在 composer 中为自定义库工作?【英文标题】:How does PSR-4 autoloading work in composer for custom libraries? 【发布时间】:2015-03-04 07:52:01 【问题描述】:

根据我对 php 中命名空间如何工作的理解,我使用以下目录结构:

project_root
    app/
    |    lib/
    |    |    MyCompany/
    |    |    |    Utility/
    |    |    |    |    Logger.php
    |    |    |    Core/
    |    |    |    |    User.php
vendor/
    composer/
    symfony/
    guzzle/
bootstrap.php
composer.json

根据 PSR-4 规范,完全限定的类名具有以下形式:

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

问题 1:

从我上面的目录结构来看,下面的假设是否正确?

命名空间名称 = 我的公司 子名称空间名称 = 实用程序 |核心 类名 = 记录器 |用户

问题 2:

如果我的 bootstrap.php 文件包含以下内容:

<?php
require 'vendor/autoload.php';

我如何 configure the 'autoload' composer.json 部分自动加载 MyCompany 目录中的类?这样我就可以在 bootstrap.php 中创建一个 Logger 实例

【问题讨论】:

【参考方案1】:

取自您链接的文档:


    "autoload": 
        "psr-4": 
            "MyCompany\\": "app/lib/MyCompany/",
        
    

这很容易解释,它只是告诉自动加载器app/lib/MyCompanyMyCompany\ 命名空间的根。

然后您就可以使用 \MyCompany\Utility\Logger 的类。

请注意,在 PSR-4 中,与 PSR-0 不同,您通常会在目录结构中省略 MyCompany,而只使用 app/lib/

【讨论】:

添加此 sn-p 后,您还需要运行 composer dump-autoload 才能使其工作。

以上是关于PSR-4 自动加载如何在 composer 中为自定义库工作?的主要内容,如果未能解决你的问题,请参考以下文章

Composer psr-4 自动加载问题

使用PSR-4配合composer autoload 自动加载文件夹

composer+psr-4实现自动加载

如何为我的项目创建 PSR-4 自动加载器?

Composer 的自动加载机制

composer的autoload来自动加载自己编写的函数库与类库?