2013-11-21 48 views

回答

19

這是一個辦法:

use Symfony\Component\Console\Output\BufferedOutput; 

Route::get('/test', function() 
{ 
    $output = new BufferedOutput; 

    Artisan::call('list', array(), $output); 

    return $output->fetch(); 
}); 
+0

這工作。但在我的具體情況下,我遇到了一個問題。你可以看看這個線程:http://stackoverflow.com/questions/20113385/artisan-output-buffer-does-not-contain-all-output – Dave

+0

我有這個相同的問題,但這工作得很好。 – enchance

4

當然,只要看看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(); 
+0

謝謝,我選擇另一個,因爲它更乾淨。但是你的方法同樣適用。 +1了 – Dave

5

似乎以前的答案不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);