我正在尝试制作一个作曲家程序包,但是我正在努力设置自动加载功能以使其可以在正在开发它的项目中工作。
我有两个项目:
finswimmer
)。在Foo Project I中(显然)也必须能够使用该软件包。但是在我自己的程序包中设置自动加载功能无效。
但是...当我将更改提交到Github时,请在Packagist上更新程序包并在Project Bar中运行composer require myhandle/mypackage
,然后它会起作用(?!)。
足够奇怪的是...如果我从Project Foo(无法正常工作的项目)中进行composer update
的操作。因此,将软件包更新为当前版本(?),使其开始工作。
所以它一定与我设置自动加载方式有关。
注释:
我通过在供应商目录中新建一个(空)文件夹来启动该程序包,然后在该程序包中构建该程序包。我认为它很聪明,因为它可以反映我composer update
包裹的外观。
我不知道这是否是不好的做法,因为Composer不再“控制”供应商目录中的所有文件。
关于如何制作Composer软件包的指南很多,但其中没有一个指南说明了在开发软件包的项目中构造文件的好方法。
这是我要做的“得到错误”(在Project Foo中):
composer required
myhandle/mypackage/src/Test.php
然后我得到错误:
致命错误:未捕获错误:未找到类'MyNamespace \ MyPackageName \ Test'
这就是在Project Bar中工作的方式(完全相同的代码)。
我在正在开发的程序包中找不到有关如何正确 setup 自动加载的指南。我正在使用这个在另一个作曲家项目中找到的自动加载文件。我把它放在我项目的根目录下。看起来像这样:
$test = new MyNamespace\MyPackageName\Test();
我无法在Composer文档中找到它,以及如何在新项目/程序包中进行设置。但是,我可以找到大量关于如何使用自动加载的指南。
答案 0 :(得分:3)
在getcomposer.org regarding autoloading上查看文档
删除您的自定义自动加载器定义,在composer.json中注册您的名称空间(希望您已经遵循PSR-4),运行composer dump-autoload
。
最后但并非最不重要的一点是,无论何时何地都需要使用它,只需添加
require __DIR__ . '/vendor/autoload.php';