Symfony 2.1 - 使用 JMSDiExtraBundle 创建身份验证侦听器


Symfony 2.1 - Creating authentication listener with JMSDiExtraBundle

我创建了以下侦听器:

<?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