我想在注册表单时自动设置密码。所以我使用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