我遇到了允许Laravel作业与控制台输出交互的问题。
目前,我正在将OutputStyle从命令传递给Job构造函数并分配它。
我已经看到了InteractsWithIO特性,但如果我自己使用它,而没有从命令中分配OutputStyle,那么它就会说它是null。
Call to a member function title() on null
我还尝试过使用从容器中设置$this->output
$this->output = resolve(OutputStyle::class);
失败
Target [SymfonyComponentConsoleInputInputInterface] is not instantiable while building [IlluminateConsoleOutputStyle].
我还遇到了贯穿此作业的PHPUnit测试的问题。类的输出显示在测试输出中。
.......................Processing element 1 for "Section"
.......
在同样适用于PHPUnit的Laravel中,处理向控制台输出的最佳方式是什么?
将以下代码放入服务提供商中是有效的:
$this->app->bind('console.output', function () {
return new OutputStyle(
new StringInput(''),
new StreamOutput(fopen('php://stdout', 'w'))
);
});
然后我可以说,在我的工作中,
$this->output = resolve('console.output');
它可以访问所有方法,如title
、section
和table
。