1

我有一个事件监听器,当用户登录我的 Symfony 设置时应该触发它。

我的 services.yml 中有以下内容

...
d_user.login_listener:
    class: D\UserBundle\EventListener\LoginListener
    arguments: []
    tags:
        - { name: 'kernel.event_subscriber', event: 'security.interactive_login' }

在我的登录监听器中,我只有这个:

<?php

namespace D\UserBundle\EventListener;

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class LoginListener implements EventSubscriberInterface
{
    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        echo 'user logged in';
    }

    public static function getSubscribedEvents()
    {
        return array(
            // must be registered before the default Locale listener
            'security.interactive_login' => array(array('onSecurityInteractiveLogin', 18))
        );
    }
}

在我的开发服务器上,我在重定向之前正确地看到了文本“用户登录”,但在我的生产服务器上,它只是在没有触发事件的情况下登录。我稍后会修改它以在用户登录时设置会话变量。我只需要调用该方法。

有什么建议吗?我尝试在生产环境中清除 prod 和 dev 的缓存,但这没有帮助。

4

1 回答 1

2

不鼓励使用 echo 进行调试。如果您想要输出,请使用记录器!

namespace D\UserBundle\EventListener;
use Psr\Log\LoggerInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class LoginListener implements EventSubscriberInterface
{
    private $logger;
    private $router;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $this->logger->info('user logged in');
    }

    public static function getSubscribedEvents()
    {
        return array(
            // must be registered before the default Locale listener
            'security.interactive_login' => array(array('onSecurityInteractiveLogin', 18))
        );
    }
}

并在您的服务定义中注入记录器,最好使用一个漂亮的通道名称:

d_user.login_listener:
    class: D\UserBundle\EventListener\LoginListener
    arguments: [@logger]
    tags:
        - { name: 'kernel.event_subscriber', event: 'security.interactive_login' }
        - { name: monolog.logger, channel: d_user }
于 2013-09-16T12:28:36.450 回答