我想在註冊表單時自動設置密碼。所以我使用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.yml
在http://symfony.com/doc/master/bundles/FOSUserBundle/controller_events.html,但沒有爲我工作!
你使用的是目前的symfony 3.3版本嗎? – lordrhodos
@lordrhodos nope我正在使用3.2.8 – Arcv