2016-05-15 38 views
2

我想在控制器中運行沒有shell命令的composer dump-autoload
在laravel 4我使用Artisan::call('dump-autoload');
但在laravel 5這個命令不起作用。從laravel 5中的控制器運行composer dump-autoload

+1

你試過'Artisan :: call('composer dump-autoload');'?如果你需要一個_real_ artisan命令,你需要讓自己習慣於編寫命令(https://laravel.com/docs/master/artisan#writing-commands) – codedge

+0

命令「composer dump-autoload」沒有被定義。 – paranoid

+0

我在想這可能會發生。你可以用'exec'或'system'使用本地php,或者更好地使用正確的工匠命令..正如Laravel官方文檔中所述。 請記住,主機系統上大多禁止「exec」和「system」。 – codedge

回答

6

工匠沒有包裝器composer。作曲家本身帶來composer命令來控制自己。

目前還沒有方法來調用在適當方式composer命令,從工匠 - 甚至沒有與php artisan make:console CommandName創建自己的工匠命令。

除非您不希望使用PHP execsystem,我強烈建議您不要這樣做,您最好單獨運行composer dump-autoload

+0

有沒有辦法用你自己的命令做到這一點,而不使用'exec'或'system',檢查我的答案。 –

2

試試這個

system('composer dump-autoload'); 
+1

我不想使用系統命令 – paranoid

3

中有> = Laravel 5.0沒有Artisan::call('dump-autoload');命令,但如果你仍然想使用此命令,不想execsystem使用的解決方案,你需要創建自己的命令:php artisan make:console DumpAutoload(您需要添加新的命令到$commands數組app/Console/Kernel.php)。然後,你需要注入作曲類給你新的命令結構:

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

    $this->composer = $composer; 
} 

,然後你可以在handle()方法運行dumpAutoloads()

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

檢查類MigrateMakeCommandvendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php有使用它的一個示例命令。在這裏你有我的命令:

<?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(); 
    } 
} 
+1

對於使用laravel 5.5和更高版本的人。更改使用以使用Illuminate \ Support \ Composer; –