我正在尝试向通过Twilio在我的网站注册的用户发送短信,我收到了vresh / twilio-bundle,它运行正常。 我试图将twilio实例传递给事件,但我想我错过了一些东西,这就是我在做的事情:
在config.yml中,我设置了这样的服务:
services:
registration.completed.listener:
class: Jaguar\AloBundle\EventListener\RegistrationEventListener
arguments:
entityManager: ["@doctrine.orm.voipswitch_entity_manager", "vresh_twilio"]
tags:
- { name: kernel.event_subscriber, event: performOnRegistrationCompleted }
我已经宣布了twilio配置:
vresh_twilio:
sid: 'xxx'
authToken: 'xxx'
version: '2010-04-01'
retryAttempts: 3
然后,在我的方法中,我尝试获取实例:
public function performOnRegistrationCompleted(UserEvent $event)
{
$twilio = $event->get('vresh_twilio');
}
但它失败了......
对此有任何帮助吗?
非常感谢!
答案 0 :(得分:1)
您的服务设置存在一些问题。
您实际上没有传递Twilio实例,因为服务名称前面没有@
符号。 @vresh_twilio
是一项服务,vresh_twilio
只是一个字符串。
您传入的关联数组的键为entityManager
,值也是一个数组,其值为服务@doctrine.orm.voipswitch_entity_manager
和字符串vresh_twilio
。
如果您在构造函数中使用Twilio实例构建侦听器,则不会传递Twilio实例。
您的服务实际上应该是......
services:
registration.completed.listener:
class: Jaguar\AloBundle\EventListener\RegistrationEventListener
arguments:
entityManager: "@doctrine.orm.voipswitch_entity_manager"
twilio: "@vresh_twilio"
// Or
// - @doctrine.orm.voipswitch_entity_manager
// - @vresh_twilio
// Or
// [@doctrine.orm.voipswitch_entity_manager, @vresh_twilio]
//
// As they all mean the same thing and the keys aren't
// used in your actual service __construct
tags:
- { name: kernel.event_subscriber, event: performOnRegistrationCompleted }
这意味着你的监听器会有一个构造函数来接收像..
这样的服务protected $entityManager;
protected $twilio;
public function __conctruct(ObjectManager $entityManager, TwilioWrapper $twilio)
{
$this->entityManager = $entityManager;
$this->twilio = $twilio;
}
这意味着您可以使用$this->twilio
在课堂上调用它。
此外,通过查看services that the Vresh\TwilioBundle
创建它看起来像您要注入的服务将是@twilio.api
而不是@vresh_twilio
,因为它似乎不存在但是我可能错了(我自己没有使用过这个包)。