Tôi đang sử dụng Artisan::call()
ở một trong các tuyến đường của mình và muốn lưu đầu ra lệnh vào một biến.Làm thế nào để lưu/chuyển hướng đầu ra từ lệnh Laravel Artisan?
Có cách nào để chụp STDOUT và STDERR được tạo bởi lệnh nghệ nhân không?
Tôi đang sử dụng Artisan::call()
ở một trong các tuyến đường của mình và muốn lưu đầu ra lệnh vào một biến.Làm thế nào để lưu/chuyển hướng đầu ra từ lệnh Laravel Artisan?
Có cách nào để chụp STDOUT và STDERR được tạo bởi lệnh nghệ nhân không?
Đây là một cách:
use Symfony\Component\Console\Output\BufferedOutput;
Route::get('/test', function()
{
$output = new BufferedOutput;
Artisan::call('list', array(), $output);
return $output->fetch();
});
Chắc chắn, chỉ cần xem định nghĩa phương thức Illuminate\Foundation\Artisan::call
. Nó chấp nhận một tham số thứ ba, mà bạn có thể kiểm soát luồng đầu ra được sử dụng. Ví dụ:
$outputStream = new \Symfony\Component\Console\Output\StreamOutput(
fopen('php://output', 'w')
);
ob_start();
Artisan::call('routes', [], $outputStream);
$commandOutput = ob_get_clean();
Cảm ơn, tôi đang chọn cái khác vì nó sạch hơn. Nhưng phương pháp của bạn cũng hoạt động tốt. + 1'ed – Dave
Dường như câu trả lời trước không làm việc trong Laravel 5.2 nữa (không chắc chắn về 5.1) Bây giờ bạn có thể sử dụng 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);
Tính năng này hoạt động. Tuy nhiên trong trường hợp cụ thể của tôi, tôi gặp phải một vấn đề. Bạn có thể xem xét chủ đề này: http://stackoverflow.com/questions/20113385/artisan-output-buffer-does-not-contain-all-output – Dave
Tôi đã có cùng một vấn đề này nhưng điều này làm việc tốt. – enchance