【问题标题】:Dependency injection in a symfony console command? Not full Symfony applicationsymfony 控制台命令中的依赖注入?不是完整的 Symfony 应用程序
【发布时间】:2014-02-21 02:17:24
【问题描述】:

我已经看过这个How can i inject dependencies to Symfony Console commands?,但这个答案并没有真正提供足够的信息,并且已经在这里解释了http://symfony.com/doc/current/cookbook/console/console_command.html

问题是 containerAwareCommand 不适用于此处的设置 http://symfony.com/doc/current/components/console/introduction.html

据我所知,为了使用 containerAwareCommand,我需要我的应用程序使用 Symfony\Bundle\FrameworkBundle\Console\Application

而不是

Symfony\Component\Console\Application

但是使用 frameworkBundle 应用程序类需要一个 KernelInterface 实例,并且不允许我将名称和版本传递给我的应用程序。

这是我所拥有的不适用于 containerAwareCommands 的内容

#!/usr/bin/env php
<?php

require __DIR__.'/../src/vendor/autoload.php';

$app = new Symfony\Component\Console\Application('spud', '0.0.1');

$app->add(new Isimmons\Spudster\Console\Commands\SayHelloCommand);

$app->run();

它自己运行的命令,但在尝试使用 getContainer 时出现错误

 Call to undefined method Symfony\Component\Console\Application::getKernel()

关于接下来可能会出现的相关主题,在容器中注册类的文档显示使用 app/config/config.php 文件。但我没有 app 目录,因为这不是一个完整的 symfony 应用程序。除了上面的文件之外,所有应用程序都位于我的基本目录是 src/lib。如果我能弄清楚上面的第一部分,symfony 是否能够在 src/lib/config/config.php 找到配置文件?

【问题讨论】:

  • 如果您没有运行完整的 Symfony 应用程序,那么您可能应该在一开始就说明,因为人们会使用他们对 Symfony 的了解来回答您的问题。
  • 更新了标题。谢谢
  • Symfony 控制台组件没有对依赖注入组件的内置支持。因此,您需要构建自己的容器,扩展应用程序类并将容器添加到其中,然后扩展命令类以从应用程序中提取容器。
  • 虽然如果可以将 containerAware 命令添加到简单的非框架 symfony 控制台命令中会很好,但我认为真正的问题是需要在文档中更清楚地说明 containerAware 命令它们与文档的其他部分中也演示的简单命令不同,并且不能与这些简单命令一起使用。我终于弄清楚了如何制作自己的容器和容器感知命令,并将在今天发布答案。
  • @isimmons 太糟糕了,你没有发布那个答案,看来我在这里遇到了同样的问题。

标签: php symfony console


【解决方案1】:

您可以使用Consolefull 应用程序。

Consolefull 是一个与 Symfony 控制台组件和 Symfony 依赖注入组件一起使用的简单库

【讨论】:

  • 您建议使用另一个 3rd 方库,而不是 OP 可能要求的。 symfony 的正确做法是什么。
猜你喜欢
  • 2014-11-15
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多