Run composer dump-autoload from controller in laravel 5

19,874

Solution 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.

Solution 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();
    }
}

Solution 3

Try this

system('composer dump-autoload');
Share:
19,874
paranoid
Author by

paranoid

I am beginner in laravel .

Updated on June 26, 2022

Comments

  • paranoid
    paranoid almost 2 years

    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.

  • Marek Skiba
    Marek Skiba about 7 years
    There is way to do this with your own command without using exec or system, check my answer.
  • Wim Pruiksma
    Wim Pruiksma over 6 years
    For the ones using laravel 5.5 and higher. change the Use to use Illuminate\Support\Composer;
  • Erin
    Erin about 5 years
    Don't do both $this->composer->dumpAutoloads() and $this->composer->dumpOptimized();. dumpOptimized is the same as dumpAutoloads('--optimize')
  • Furqan Ansari
    Furqan Ansari over 4 years
    For laravel version 5.3 and above use php artisan make:command CommandName
  • Nico Haase
    Nico Haase over 3 years
    Please share more details. Why should there be any need to wrap the result in markup?