我有一个作曲家项目,称之为MyVendor\Database
。该项目使用作曲家和自动加载。该项目中有几个文件包含:
require_once __DIR__."/../vendor/autoload.php";
以便使用自动加载。
这一切都很有效,直到我将MyVendor\Database
包含在另一个项目中。
我有另一个项目,称之为MyVendor\CoolPackage
,需要MyVendor\Database
。
我在CoolPackage
上运行composer install,然后将MyVendor\Database
下载到供应商文件夹中。
此处的问题是vendor\MyVendor\Database
中的我的文件失败,因为他们调用require_once __DIR__."/../vendor/autoload.php"
,但\vendor\MyVendor\Database
内没有供应商文件夹。
答案 0 :(得分:1)
在composer.json
中,您定义了自动加载方案。由于您现在发现自己的原因,将Composer自动加载到任何应该可自动加载的文件中并不是一个好主意,不仅在该应用程序或模块内,而且在任何其他应用程序中也是如此。
基本上,任何Composer项目中的文件都应该根据PSR-0或4自动加载的定义进行划分:它们要么只是声明类或函数而没有任何副作用(比如执行代码),要么它们执行代码而不执行定义类或函数。只有以前的文件可以自动加载(除了函数,只能通过加载包含files
自动加载部分的文件来声明),后者不应自动加载。
然后它应该变得相对容易:当该组件包含在另一个应用程序中时,也可以使用所有可以自动加载的类。不能直接使用任何其他非类的东西。