我有一個我一直在用作其他服務的類。我現在正在設置一個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類,但不是肯定。如果這就是原因,那我該如何爲這個班級提供服務?
感謝
難道是因爲你沒有公共函數期望你可以調用的構造函數嗎? – KhorneHoly 2015-03-02 12:21:35
命令文件中的命名空間在哪裏? – 2015-03-02 12:31:48
命名空間位於我的文件頂部,未包含在上面的代碼中 – 2015-03-02 12:49:41