gpt4 book ai didi

php - Composer,PSR-4 自动加载迭代

转载 作者:搜寻专家 更新时间:2023-10-31 20:40:08 25 4
gpt4 key购买 nike

我目前正在运行 Slim 和 Twig,我的文件夹结构如下

/application/modules

在我的 composer.json 中有

"autoload": {
"psr-4": {
"Application\\": "application/modules/",
"Core\\": "application/",
"Middleware\\": "application/slim/middleware/"
}
}

我的问题是,在 Application\modules\ 中,每个模块都有一个目录。现在我的问题是,是否可以让 composer 在使用 PSR-4 自动加载时遍历子目录?

最佳答案

我发现您的 PSR-4 声明存在问题。

您不应将“核心”类放在包含其他命名空间子文件夹的文件夹中。

Composer 中的 PSR-4 自动加载是这样工作的:如果要加载的类的完全限定类名与任何 PSR-4 定义中声明的前缀匹配,则前缀中提到的前缀将从类名中删除, 其余的类名映射到文件名并被搜索。

如果在文件夹 application/modules 中有名为 Application\ 的类,并且在文件夹 中有名为 Core\ 的类>application,那么从技术上讲,Composer 可能会找到与类名匹配的文件,如 Core\modules\Whatever,尽管这些文件将包含类 Application\Whatever .

我建议将所有 Core 类移动到它们自己的文件夹中,并在 PSR-4 声明中指向它。

你原来问题的问题是你遗漏了一个重要信息:你的模块的类和文件结构是什么?

Composer 的自动加载器将愉快地解析任何以命名空间前缀 Application 开头的类,从类名中删除该前缀,将剩余部分转换为路径名并在 application/中搜索该文件模块/。鉴于您有一个模块类 Application\MyModule\Foobar,它将在 application/modules/MyModule/Foobar.php 中搜索。为什么?因为前缀 Application 将被删除以允许 PSR-4 中的较短路径名。 (使用 PSR-0 意味着您必须为类名中的每个命名空间级别创建一个文件夹。)

请注意,为了获得最佳性能,建议使命名空间的前缀尽可能长,因为 Composer 允许为任何给定前缀拥有多个目录,但必须在多个目录中搜索正确的文件.搜索文件很耗时!

关于php - Composer,PSR-4 自动加载迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24354065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com