2017-05-31 135 views
0

我想在注册表单时自动设置密码。所以我使用REGISTRATION_INITIALIZE来触发事件。不幸的是它不工作。FOSUserBundle事件REGISTRATION_INITIALIZE未触发

监听器:

<?php 

namespace Acme\UserBundle\EventListener; 

use Doctrine\ORM\EntityManager; 
use FOS\UserBundle\Event\UserEvent; 
use FOS\UserBundle\FOSUserEvents; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 

class RegistrationListener implements EventSubscriberInterface 
{ 
    /** 
    * @var EntityManager 
    */ 
    private $em; 
/** 
* @param \Doctrine\ORM\EntityManager $entityManager 
*/ 
public function __construct(EntityManager $entityManager) 
{ 
    $this->em = $entityManager; 
} 

/** 
* {@inheritdoc} 
*/ 
public static function getSubscribedEvents() 
{ 
    return array(
     FOSUserEvents::REGISTRATION_INITIALIZE => 'onRegistrationInit', 
    ); 
} 

public function onRegistrationInit(UserEvent $userEvent) 
{ 
    $user = $userEvent->getUser(); 

    $user->setPassword('abcdeffffff'); 

} 

服务:

#src/Acme/UserBundle/Resources/config/services.yml 
services: 
acme_user.registration: 
    class: Acme\UserBundle\EventListener\RegistrationListener 
    arguments: 
     entityManager: "@doctrine.orm.entity_manager" 
    tags: 
     - { name: kernel.event_subscriber} 

所以密码没有设置,它显示密码不应该是空白。

我在做什么错?任何帮助!

编辑:

这个问题是我在错误的地方定义服务。

相反的src/Acme/UserBundle/Resources/config/services.yml,它应该是app/config/services.yml

我看到src/Acme/UserBundle/Resources/config/services.ymlhttp://symfony.com/doc/master/bundles/FOSUserBundle/controller_events.html,但没有为我工作!

+0

你使用的是目前的symfony 3.3版本吗? – lordrhodos

+0

@lordrhodos nope我正在使用3.2.8 – Arcv

回答

0

也许我错了,但我觉得你的服务定义使用features from Symfony 3.3,但使用的是Symfony 3.2.8,例如

版本3.3中的新功能:在Symfony 3.3中添加了通过名称($ adminEmail)配置参数的功能。以前,只能通过其索引(本例中为2)或通过对其他参数使用空引号来配置它。

尝试更新的服务定义:

#src/Acme/UserBundle/Resources/config/services.yml 
services: 
    acme_user.registration: 
     class: Acme\UserBundle\EventListener\RegistrationListener 
     arguments: ["@doctrine.orm.entity_manager"] 
     tags: 
      - { name: kernel.event_subscriber} 

并有句话:当你实际使用的用户,你应该RegistrationListener重命名类RegistrationSubscriber

+0

不,不是原因。请参阅我的编辑 – Arcv