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/MyCompany
是MyCompany\
命名空间的根。
然后您就可以使用 \MyCompany\Utility\Logger
的类。
请注意,在 PSR-4 中,与 PSR-0 不同,您通常会在目录结构中省略 MyCompany
,而只使用 app/lib/
。
【讨论】:
添加此 sn-p 后,您还需要运行composer dump-autoload
才能使其工作。以上是关于PSR-4 自动加载如何在 composer 中为自定义库工作?的主要内容,如果未能解决你的问题,请参考以下文章