Run composer dump-autoload from controller in laravel 5

这一生的挚爱 提交于 2021-01-15 18:39:05

问题


I want to run composer dump-autoload without shell command in controller.
In laravel 4 I use Artisan::call('dump-autoload');
but in laravel 5 this command not work.


回答1:


Artisan is not wrapper for composer. Composer itself brings the composer command to control itself.

Currently there is no way to call composer commands in a proper way from Artisan - not even with creating your own Artisan command with php artisan make:console CommandName.

Unless you don't want to use PHPs exec or system, which I highly do not recommend, you better run composer dump-autoload on its own.




回答2:


There is no Artisan::call('dump-autoload'); command in >= Laravel 5.0, but if you still want to use this command and don't want use solutions with exec or system, you need create your own command by: php artisan make:console DumpAutoload for Laravel version > 5.3 (You need add new command to $commands array in app/Console/Kernel.php). Then you need inject Composer class to you new command construction:

public function __construct(Composer $composer)
{
    parent::__construct();

    $this->composer = $composer;
}

and then you can run dumpAutoloads() in handle() method:

public function handle()
{
    $this->composer->dumpAutoloads();
}

Check class MigrateMakeCommand in vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php there is an example command that use it. Here you have my command:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Foundation\Composer;

class DumpAutoload extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'dump-autoload';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Regenerate framework autoload files';

    /**
     * The Composer instance.
     *
     * @var \Illuminate\Foundation\Composer
     */
    protected $composer;

    /**
     * Create a new command instance.
     *
     * @param Composer $composer
     * @return void
     */
    public function __construct(Composer $composer)
    {
        parent::__construct();

        $this->composer = $composer;
    }

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function handle()
    {
        $this->composer->dumpAutoloads();
        $this->composer->dumpOptimized();
    }
}



回答3:


Try this

system('composer dump-autoload');



回答4:


you can run this for better result. it will give your result like command line.

 return  "<pre>". shell_exec ('composer dump-autoload')."</pre>"; 


来源:https://stackoverflow.com/questions/37238547/run-composer-dump-autoload-from-controller-in-laravel-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!