如何更新作曲家.json从Laravel控制器


How to update composer.json from Laravel controller

所以我正在构建一个Laravel包,有一个特殊的功能需要通过添加psr-4命名空间来更新composer,该命名空间指向Laravel基路径中的一个目录。

我已经试过了,但是不工作。

$loader = include(base_path('vendor/autoload.php')); 
$loader->add('Classes'Weather', base_path('modules')); 

后:

$weather = new Classes'Weather'WeatherSite();

你可以检查一下这个线程,它给出了一些解决方案:

https://github.com/composer/composer/issues/1906 issuecomment - 51632453

经过几次尝试和查看Composer文档,我能够想出这个工作:

注意:我需要这个解决方案的原因是使我能够从Laravel包中自动添加Psr4路径,而无需手动在composer.json 中手动添加包中所需的特定路径。

将此添加到软件包服务提供商的引导方法中,我的是DigitlimitModuleServiceProvider

use Illuminate'Support'ServiceProvider;
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()
    {
    }
}