2015-03-02 166 views
1

我有一個我一直在用作其他服務的類。我現在正在設置一個Command類來爲我運行cron作業。這個Command類需要使用包含在我作爲Service設置的類中的函數。所以我認爲訪問這個函數的最好方法是將它注入到我的Command類中。所以在我的服務中,我有Symfony2注入服務

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應用程序/控制檯NickAlertBundle:uapi_cron

我得到的錯誤

[InvalidArgumentException]
在「NickAlertBundle」命名空間中沒有定義任何命令。

我想這可能是因爲我已經添加了一個__construct函數的Command類,但不是肯定。如果這就是原因,那我該如何爲這個班級提供服務?

感謝

+0

難道是因爲你沒有公共函數期望你可以調用的構造函數嗎? – KhorneHoly 2015-03-02 12:21:35

+0

命令文件中的命名空間在哪裏? – 2015-03-02 12:31:48

+0

命名空間位於我的文件頂部,未包含在上面的代碼中 – 2015-03-02 12:49:41

回答

1

正如你可以在你的UapiCronCommand類看到$this->setName('OntroAlertBundle:uapi_cron')定義的「命令名稱」 OntroAlertBundle:uapi_cron和NOT NickAlertBundle:uapi_cron(如也顯示出在錯誤消息)。