所以我正在构建一个Laravel包,有一个特殊的功能需要通过添加psr-4命名空间来更新composer,该命名空间指向Laravel基路径中的一个目录。
我已经试过了,但是不工作。
$loader = include(base_path('vendor/autoload.php'));
$loader->add('ClassesWeather', base_path('modules'));
后:
$weather = new ClassesWeatherWeatherSite();
你可以检查一下这个线程,它给出了一些解决方案:
https://github.com/composer/composer/issues/1906 issuecomment - 51632453
经过几次尝试和查看Composer文档,我能够想出这个工作:
注意:我需要这个解决方案的原因是使我能够从Laravel包中自动添加Psr4路径,而无需手动在composer.json 中手动添加包中所需的特定路径。将此添加到软件包服务提供商的引导方法中,我的是DigitlimitModuleServiceProvider
use IlluminateSupportServiceProvider;
class DigitlimitModuleServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$autoload = require base_path('vendor/autoload.php');
$autoload->addPsr4('Digitlimit\Module\', base_path('modules'));
$autoload->register();
if(!file_exists(base_path('modules'))){
File::makeDirectory(base_path('modules'));
//works as long as there is permission
}
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
}