问题
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