繁体   English   中英

Composer,PSR-4自动加载迭代

[英]Composer, PSR-4 Autoloading Iteration

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

/application/modules

在我的composer.json中,我有

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

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

我看到你的PSR-4声明存在问题。

您不应将“Core”类放在具有其他命名空间的子文件夹的文件夹中。

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

如果你有一个名为类Application\\在文件夹中application/modules ,和你有一个名为类Core\\在文件夹中application ,然后在技术上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允许为任何给定前缀创建多个目录,但必须在多个目录中搜索正确的文件。 搜索文件非常耗时!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM