2017-05-31 35 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