Я использую Artisan::call()
на одном из моих маршрутов и хочу сохранить вывод команды в переменную.
Есть ли способ захватить STDOUT и STDERR, созданные командой artisan?
Это способ:
use Symfony\Component\Console\Output\BufferedOutput; Route::get('/test', function() { $output = new BufferedOutput; Artisan::call('list', array(), $output); return $output->fetch(); });
Кажется, что предыдущие ответы больше не работают в 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);
Конечно, просто взгляните на определение метода Illuminate\Foundation\Artisan::call
. Он принимает третий параметр, с помощью которого вы можете управлять используемым выходным потоком. Например:
$outputStream = new \Symfony\Component\Console\Output\StreamOutput( fopen('php://output', 'w') ); ob_start(); Artisan::call('routes', [], $outputStream); $commandOutput = ob_get_clean();