我想在控制器中运行不带外壳命令的composer dump-autoload
。
在laravel 4中我使用Artisan::call('dump-autoload');
但在laravel 5中,此命令不起作用。
发布于 2017-03-02 20:10:09
在>= Laravel 5.0中没有Artisan::call('dump-autoload');
命令,但是如果您仍然想使用此命令,并且不想在exec
或system
中使用解决方案,则需要通过以下方式创建自己的命令:php artisan make:console DumpAutoload
for Laravel version > 5.3 (您需要在app/Console/Kernel.php
中向$commands
数组添加新命令)。然后你需要将Composer类注入到你的新命令构造中:
public function __construct(Composer $composer)
{
parent::__construct();
$this->composer = $composer;
}
然后,您可以在handle()
方法中运行dumpAutoloads()
:
public function handle()
{
$this->composer->dumpAutoloads();
}
检查vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php
中的MigrateMakeCommand
类,有一个使用它的命令示例。下面是我的命令:
<?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();
}
}
发布于 2016-05-15 21:01:54
尝尝这个
system('composer dump-autoload');
发布于 2021-01-14 19:43:03
您可以运行此命令以获得更好的结果。它会像命令行一样给出你的结果。
return "<pre>". shell_exec ('composer dump-autoload')."</pre>";
https://stackoverflow.com/questions/37238547
复制相似问题