Php FOSUserBundle事件注册\未触发初始化
我想在注册表单时自动设置密码。所以我使用注册\初始化来触发事件。不幸的是,它不起作用 听众:Php FOSUserBundle事件注册\未触发初始化,php,symfony,fosuserbundle,Php,Symfony,Fosuserbundle,我想在注册表单时自动设置密码。所以我使用注册\初始化来触发事件。不幸的是,它不起作用 听众: <?php namespace Acme\UserBundle\EventListener; use Doctrine\ORM\EntityManager; use FOS\UserBundle\Event\UserEvent; use FOS\UserBundle\FOSUserEvents; use Symfony\Component\EventDispatcher\EventSubscr
<?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');
}
因此,密码未设置,显示密码不应为空
我做错了什么?任何帮助
编辑:
问题是我在错误的地方定义了服务
它应该是app/config/services.yml
,而不是src/Acme/UserBundle/Resources/config/services.yml
我在中看到了
src/Acme/UserBundle/Resources/config/services.yml,但不适合我 也许我错了,但我认为您的服务定义使用了,但您正在使用,例如
版本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
您使用的是当前的symfony 3.3版本吗?@Lordrodos nope我使用的是3.2.8
#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}