Symfony2注入服务

时间:2015-03-02 12:15:08

标签: php symfony

我有一个课程,我一直在用作其他东西的服务。我现在正在设置一个Command类来为我运行一个cron作业。这个Command类需要使用一个函数,该函数包含在我设置为服务的类中。所以我认为访问这个函数的最好方法是将它注入我的Command类。所以在我的服务中我有

services:
    alert_bundle.api_service:
        class: Nick\AlertBundle\Service\UapiService
        arguments: [@service_container]

    alert_bundle.cron_service:
            class: Nick\AlertBundle\Command\UapiCronCommand
            arguments: [@alert_bundle.api_service]

UapiService是包含我需要的功能的类。 UapiCronCommand是我正在执行我的Cron的命令类。

然后我有我的命令类

class UapiCronCommand extends ContainerAwareCommand
{
    protected $api_service;

    public function __construct(UapiService $api_service)
    {
        $this->api_service = $api_service;
    }

    protected function configure()
    {
        $this->setName('OntroAlertBundle:uapi_cron')
            ->setDescription('Cron Job for Alerts');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->getContainer()->get('doctrine.orm.entity_manager');
        $allAlerts = $em->getRepository("NickAlertBundle:Alert")->getAlertEntity();

        foreach($allAlerts as $alert) {
            if ($alert instanceof Alert) {
                $this->api_service->addFlightsAction($alert);
            }
        }

        $em->flush();
    }
} 

现在我认为这将注入我的UapiService类,所以我现在可以使用它的功能,但是当我用

测试时
  

php app / console NickAlertBundle:uapi_cron

我收到错误

  

[InvalidArgumentException]
  “NickAlertBundle”命名空间中没有定义命令。

我认为这可能是因为我在Command类中添加了__construct函数,但不确定。如果这是原因,我怎么才能把我的服务送到这个班级?

由于

1 个答案:

答案 0 :(得分:1)

正如您在UapiCronCommand课程中看到的那样,$this->setName('OntroAlertBundle:uapi_cron')中定义的“命令名称”为 OntroAlertBundle:uapi_cron 而非NickAlertBundle:uapi_cron(如同在错误消息中。)