私のルートの1つにArtisan::call()
を使用しており、コマンド出力を変数に保存したいと考えています。Laravel Artisanコマンドの出力を保存/リダイレクトする方法は?
artisanコマンドで生成されたSTDOUTとSTDERRをキャプチャする方法はありますか?
私のルートの1つにArtisan::call()
を使用しており、コマンド出力を変数に保存したいと考えています。Laravel Artisanコマンドの出力を保存/リダイレクトする方法は?
artisanコマンドで生成されたSTDOUTとSTDERRをキャプチャする方法はありますか?
これは方法です:
use Symfony\Component\Console\Output\BufferedOutput;
Route::get('/test', function()
{
$output = new BufferedOutput;
Artisan::call('list', array(), $output);
return $output->fetch();
});
もちろん、Illuminate\Foundation\Artisan::call
のメソッド定義を見てください。これは、使用される出力ストリームを制御するための3番目のパラメータを受け入れます。たとえば:
$outputStream = new \Symfony\Component\Console\Output\StreamOutput(
fopen('php://output', 'w')
);
ob_start();
Artisan::call('routes', [], $outputStream);
$commandOutput = ob_get_clean();
ありがとうございます、私はそれがきれいなので、もう一つを選んでいます。しかし、あなたの方法はまったく同じように機能します。 + 1'ed – Dave
はLaravel 5.2これ以上(5.1わからない) では動作しません。以前の回答だあなたが今使用することができますArtisan::output();
$output = '';
if (!Schema::hasTable('migrations')) {
Artisan::call('migrate:install', array());
$output .= Artisan::output();
}
// Updates the migration, then seed the database
Artisan::call('migrate:refresh', array('--force' => 1));
$output .= Artisan::output();
Artisan::call('db:seed', array('--force' => 1));
$output .= Artisan::output();
dd($output);
これは動作します。しかし、私の場合、私は問題に遭遇しました。このスレッドを見てください:http://stackoverflow.com/questions/20113385/artisan-output-buffer-does-not-contain-all-output – Dave
私はこの同じ問題があったが、これはうまくいった。 – enchance