我有一个课程,我一直在用作其他东西的服务。我现在正在设置一个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函数,但不确定。如果这是原因,我怎么才能把我的服务送到这个班级?
由于
答案 0 :(得分:1)
正如您在UapiCronCommand
课程中看到的那样,$this->setName('OntroAlertBundle:uapi_cron')
中定义的“命令名称”为 OntroAlertBundle:uapi_cron 而非NickAlertBundle:uapi_cron
(如同在错误消息中。)