symfony - 如何将依赖项注入(inject) Symfony 控制台命令?

标签 symfony dependency-injection console

我正在编写一个使用一些 Symfony 组件的开源应用程序,并使用 Symfony 控制台组件与 shell 交互。

但是,我需要注入(inject)依赖项(在所有命令中使用),例如 Logger、Config 对象、Yaml 解析器。我通过扩展 Symfony\Component\Console\Command\Command 解决了这个问题类(class)。但这使单元测试变得更加困难并且看起来不正确。

我该如何解决这个问题?

最佳答案

由于 Symfony 4.2 ContainerAwareCommand 已弃用。请改用 DI。

namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Doctrine\ORM\EntityManagerInterface;

final class YourCommand extends Command
{
    /**
     * @var EntityManagerInterface
     */
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;

        parent::__construct();
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // YOUR CODE
        $this->entityManager->persist($object1);    
    }
}

关于symfony - 如何将依赖项注入(inject) Symfony 控制台命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597912/

相关文章:

image - 如何获取使用 webpack encore 生成的图像的路径

node.js - 从标准输出中清除多行

node.js - Node 检查器控制台 - 无法执行命令,而是转到换行符

Symfony 尝试在设置参数中使用 id 数组

php - 检查 Symfony 中每个 Controller 中的用户

php - 原则 2 并发问题

c# - 如何避免 .net 扩展方法中的服务定位器

php - 如何避免将我的 $registry 容器手动传递到我创建的每个新类的构造函数中?

dependency-injection - 使用 StructureMap,这些项目组织中的一个是否比另一个更好?

java - 将控制台打印到 JFrame TextArea - 行为异常(屏幕闪烁)