作曲家的文件不使用PSR0和PSR4自动加载(Symfony项目)


composer with files not using psr0 and psr4 autoloading (symfony project)

>我在作曲家自动加载器方面有问题。目前正在开发大约 10 年前开发的应用程序。 项目中当前使用的 2 个库的文件夹结构不符合 psr0 和 psr4 自动加载规则。

作曲家安装后的结构如下所示

例 1

文件夹路径:/供应商/应用手册/ORS/类/模型/国家/地区

文件名:类。国家.php

PHP 类名: 国家

例 2

文件夹路径:/供应商/应用手册/ORS/类/模型/国家/地区

文件名:类。国家收藏.php

PHP 类名: 国家集合

请告知我应该怎么做,以便作曲家自动加载程序可以检测到这些文件。

提前谢谢你

从文档中:

您可以使用类图生成支持来定义不遵循 PSR-0/4 的所有库的自动加载。要配置此项,请指定要搜索类的所有目录或文件。

例:

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

您仍然可以将composer.json添加到旧库中classmap并为它们定义自动加载类型。

您可以重命名这些文件以使它们与 PSR-4(不太可能,因为这需要使用命名空间 - 在 10 年前的代码中?)或 PSR-0 兼容。此外,由于文件名已更改,您必须通过includeinclude_oncerequirerequire_once删除这些文件的任何显式加载。

PHP 将按类名自动加载这些类。如果类名中的区分大小写未在所有地方得到尊重,则可能会遇到问题。例:

class UpperCase {}
$a = new upperCase();

自动加载会尝试查找以 upperCase.php 结尾的文件,该文件与 PSR-0 所需的UpperCase.php不匹配,因此代码将失败。但是,这将起作用,使情况不会更好:

class UpperCase {}
$b = new UpperCase();
$a = new upperCase();

原因是 PHP 将类名视为不区分大小写,因此一旦加载了类,您就可以在其名称中使用任何大小写。它只是代码路径中必须匹配的第一个匹配项。问题是要确定它到底在哪里,所以基本上它必须在任何地方都是正确的。

的,类映射功能是更简单的方法。但是您仍然希望删除include/require调用以稍微优化性能,因此无论如何您都必须接触代码。尽管它很老,但它必须得到维护 - 所以为什么不完全做到,切换到众所周知的自动加载标准。从长远来看,当您必须并行维护PSR-0/4兼容类和旧代码时,它将对您有所帮助。