2016-05-15 13 views
2

composer dump-autoloadコントローラでシェルコマンドを実行しません。
laravel 4ではArtisan::call('dump-autoload');
を使用しますが、laravel 5ではこのコマンドは機能しません。コントローラのlarvel 5からコンポーザーのdump-autoloadを実行します。

+1

あなたは '職人::コール(「作曲ダンプ-自動ロード」)をしようとしましたか;'? _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コマンドを使用して自身を制御します。ないphp artisan make:console CommandNameを使用して独自の職人コマンドを作成して -

は現在、職人から適切な方法でcomposerコマンドを呼び出す方法はありません。

execまたはsystemを使用したくない場合を除き、私は非常にお勧めしませんが、より良いcomposer dump-autoloadを実行してください。

+0

'exec'や' system'を使わずに独自のコマンドでこれを行う方法があります。私の答えをチェックしてください。 –

2

は職人がcomposerのラッパーではありません。この

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

システムコマンドを使用したくない – paranoid

3

あり> = Laravel 5.0にはArtisan::call('dump-autoload');コマンドはありませんが、あなたはまだ、このコマンドを使用するとexecまたはsystemで使用するソリューションをしたくない場合は、あなたがすることにより、独自のコマンドを作成する必要があります。php artisan make:console DumpAutoload(Add Newを必要としますコマンド$commandsapp/Console/Kernel.phpで配列)。

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

    $this->composer = $composer; 
} 

、その後、あなたがdumpAutoloads()handle()でメソッドを実行することができます:それを使用するコマンド例があるvendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php

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

チェッククラス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(); 
    } 
} 
+1

laravel 5.5以降を使用している場合。 Illuminate \ Support \ Composerを使用するように変更します。 –

関連する問題