首页 > 解决方案 > Laravel - 来自工作的输出样式

问题描述

我遇到了允许 Laravel 作业与控制台输出交互的问题。

目前,我将 OutputStyle 从 Command 传递给 Job 构造函数并分配它。

我已经看到了 InteractsWithIO 特征,但是如果我在没有从命令中分配 OutputStyle 的情况下单独使用它,那么它会说它为空。

Call to a member function title() on null

我也尝试过从$this->output容器中使用

$this->output = resolve(OutputStyle::class);

这失败了

Target [Symfony\Component\Console\Input\InputInterface] is not instantiable while building [Illuminate\Console\OutputStyle].

我还遇到了通过这项工作运行的 PHPUnit 测试的问题。类的输出显示在测试输出中。

.......................Processing element 1 for "Section"
.......

在 Laravel 中处理输出到控制台的最佳方法是什么,也适用于 PHPUnit?

标签: laravelsymfony

解决方案


将以下代码放入服务提供者中有效:

$this->app->bind('console.output', function () {
    return new OutputStyle(
        new StringInput(''),
        new StreamOutput(fopen('php://stdout', 'w'))
    );
});

然后我可以说,在我的工作中,

$this->output = resolve('console.output');

它可以访问所有方法,例如title,sectiontable.


推荐阅读