首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作曲家,PSR-4自动迭代

作曲家,PSR-4自动迭代
EN

Stack Overflow用户
提问于 2014-06-22 17:57:35
回答 1查看 2.4K关注 0票数 4

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

代码语言:javascript
复制
/application/modules

在我的composer.json里

代码语言:javascript
复制
"autoload": {
    "psr-4": {
        "Application\\":        "application/modules/",
        "Core\\":               "application/",
        "Middleware\\":         "application/slim/middleware/"
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-22 23:13:55

我发现你的PSR-4声明有问题。

您不应该将"Core“类放置在包含其他名称空间子文件夹的文件夹中。

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

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

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

您最初问题的问题在于您忽略了一个重要信息:模块的类和文件结构是什么?

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24354065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档