2013-11-21 18 views

Trả lời

19

Đâ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(); 
}); 
+0

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

+0

Tôi đã có cùng một vấn đề này nhưng điều này làm việc tốt. – enchance

4

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(); 
+0

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

5

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); 
Các vấn đề liên quan