我创建了以下侦听器:
<?php
namespace KekRozsak'SecurityBundle'Security;
use Symfony'Component'Security'Http'Authentication'AuthenticationSuccessHandlerInterface;
use Symfony'Component'HttpFoundation'Request;
use Symfony'Component'Security'Core'Authentication'Token'TokenInterface;
use Symfony'Bridge'Doctrine'RegistryInterface;
use Symfony'Component'Security'Core'Event'AuthenticationEvent;
use JMS'DiExtraBundle'Annotation as DI;
/**
* @DI'Service
* @DI'Tag("kernel.event_listener", attributes={"event" = "security.authentication.success"})
*/
class AuthSuccess implements AuthenticationSuccessHandlerInterface
{
/**
* The Doctrine interface
*
* @var Symfony'Bridge'Doctrine'RegistryInterface $doctrine
*
* @DI'Inject
*/
private $doctrine;
public function onSecurityAuthenticationSuccess(AuthenticationEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
$em = $this->doctrine->getEntityManager();
$user->setLastLoginAt(new 'DateTime('now'));
$em->persist($user);
$em->flush();
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$user = $token->getUser();
$em = $this->doctrine->getEntityManager();
$user->setLastLoginAt(new 'DateTime('now'));
$em->persist($user);
$em->flush();
}
}
但它没有被召唤。如果我注射它
<service id="kek_rozsak_security.auth.success" class="KekRozsak'SecurityBundle'Security'AuthSuccess">
<argument type="service" id="doctrine" />
<tag name="kernel.event_listener" event="security.authentication.success" />
</service>
并添加构造函数:
public function __construct(RegistryInterface $doctrine)
{
$this->doctrine = $doctrine;
}
它像魅力一样运行。我错过了什么吗?
回答我自己的(有点菜鸟)问题...
我只是忘了添加
jms_di_extra:
locations:
all_bundles: false
bundles: [ KekRozsakFrontBundle, KekRozsakSecurityBundle ]
directories: [ "%kernel.root_dir%/../src" ]
到我的config.yml