2014-11-14 139 views
0

我需要捕获通过电子邮件发送的控制台命令的输出以及请求时。我怎样才能做到这一点?在Laravel中获取控制台输出

如何从以下$this->info()调用中获得输出?

$r = processData(); 

$this->info("\nSubmitted data:"); 
$this->info("SubmissionId: " . $r['submission_id']); 
$this->info("Status: " . $r['status']); 
+0

确实[这个答案](http://stackoverflow.com/a/20111569/1903366)帮助? – lukasgeiter 2014-11-14 18:20:00

+0

@lukasgeiter不幸的是,它并不是因为我需要从执行命令本身捕获控制台输出的特定段。解决方案是从外部调用命令并捕获输出。不知道我会如何适应它(我尝试过)。 – eComEvo 2014-11-14 18:25:39

+0

好的。你可以在你的命令中覆盖'info'方法(或者如果你经常需要一个新的命令基类),然后将它保存在那里。这是一个选择吗? – lukasgeiter 2014-11-14 18:30:47

回答

0

决定用一个简单的回显命令和输出缓冲区控件替换$this->info()调用。在控制台中看起来不错,并捕获请求发送电子邮件的数据。

例子:

$r = processData(); 

if ($this->option('email-results')) 
    ob_start(); 

echo "\nSubmitted data:"; 
echo "\nSubmissionId: " . $r['submission_id']; 
echo "\nStatus: " . $r['status']; 

if ($this->option('email-results')) { 
    mail(
     $this->option('email-results'), 
     'Results on ' . $start_time->toDateTimeString(), 
     ob_get_contents() 
    ); 

    ob_end_flush(); 
} 
+0

我解决了它只是重写信息方法和跟踪本地受保护的缓冲区,但仍然调用控制台日志记录的'parent :: info()'。 '$ this-> buffer。= $ data。 “\ n”;父::信息($的数据);' – tomvo 2015-02-19 09:17:40