我有一个作曲家项目,称之为 MyVendor\Database. 。该项目使用作曲家和自动加载。该项目中有几个文件具有:

require_once __DIR__."/../vendor/autoload.php";

为了利用自动加载。

一切都很好,直到我包括 MyVendor\Database 在另一个项目中。

我还有另一个项目,称之为 MyVendor\CoolPackage 这需要 MyVendor\Database.

我运行作曲家安装 CoolPackage 它会下载 MyVendor\Database 进入供应商文件夹。

但这里的问题是我的文件 vendor\MyVendor\Database 失败是因为他们打电话 require_once __DIR__."/../vendor/autoload.php", ,但里面没有vendor文件夹 \vendor\MyVendor\Database.

有帮助吗?

解决方案

在你的 composer.json 您定义自动加载方案。由于您现在自己发现的原因,在任何应该不仅在该应用程序或模块内而且在任何其他应用程序中都应该可自动加载的文件中调用 Composer 自动加载并不是一个好主意。

基本上,任何 Composer 项目中的文件都应根据 PSR-0 或 4 自动加载的定义进行划分:它们要么只声明类或函数,而没有任何副作用(如执行代码),要么在不定义类或函数的情况下执行代码。只有前面的文件可以自动加载(函数除外,函数只能通过加载包含它们的文件来声明) files autoload 部分),后者不应自动加载。

然后它应该变得相对容易:当该组件包含在另一个应用程序中时,也可以使用所有可以自动加载的类。任何不是类的东西都不能直接使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top