2013-11-21 3 views
9

मैं अपने मार्गों में से एक में Artisan::call() का उपयोग कर रहा हूं और कमांड आउटपुट को एक चर में सहेजना चाहता हूं।लार्वार्ट आर्टिसन कमांड से आउटपुट को कैसे सहेजना/रीडायरेक्ट करना है?

क्या कारीगर कमांड द्वारा उत्पन्न STDOUT और STDERR को कैप्चर करने का कोई तरीका है?

उत्तर

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'ed – 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); 
संबंधित मुद्दे