如何从Laravel控制器更新composer.json

时间:2016-09-02 19:40:10

标签: php laravel-5 composer-php

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

到目前为止,我已经尝试了这个但是没有用。

$loader = include(base_path('vendor/autoload.php')); 

$loader->add('Classes\Weather', base_path('modules')); 

随后:

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

2 个答案:

答案 0 :(得分:1)

你可以检查这个线程,它提供了一些解决方案:

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

答案 1 :(得分:1)

经过几次试验并通过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()
    {

    }
}