2013-09-16 3 views
1

У меня есть прослушиватель событий, который должен срабатывать, когда пользователь входит в мою установку Symfony.Вход EventListener не работает на стороне производства

У меня есть следующие в моей 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)) 
     ); 
    } 
} 

На моем Dev сервере я правильно вижу текст «пользователь вошел в «перед перенаправлением, но на моем производственном сервере он просто входит в систему без запуска события. Я изменяю это позже, чтобы установить сеанс var для входа пользователя в систему. Мне просто нужно вызвать метод.

Любые советы? Я попытался очистить кэш для prod и dev в моей рабочей среде, но это не помогло.

+0

вы зашедший через «запомнить меня»? имейте в виду, что ваш слушатель запускает только интерактивный вход, а не при входе через «запомнить меня». – nifr

+0

У меня были проблемы со значением, не возвращающим то же самое из базы данных, потому что я забыл обновить связанные классы классов. Моя проблема решена. – juuga

ответ

2

Отладка с эхом обескуражена. Если вы хотите получить выход, используйте регистратор!

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)) 
     ); 
    } 
} 

и вводят регистратор в вашем Defintion службы, preferrable с красивым названием канала:

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 } 
+0

Простая и быстрая отладка выглядит по-другому для меня :) ... [ladybug] (https://github.com/raulfraile/ladybug) предлагает приятный вывод дампа ... или (лучший вариант) [xdebug] (http: // xdebug.org/), интегрированный с вашей IDE, будет моим выбором, [FirePHP] (http://firephp.org/) вместе с плагином браузера может быть весьма полезен и для быстрой отладки. – nifr

+0

Он хочет выход. Xdebug работает нормально, firephp/chromephp зависит от монологических и зарегистрированных сообщений и разрешено только в режиме dev по умолчанию и не должно быть включено в prod. –

+0

И с божьей коровкой, это как var_dump эхо. Не уверен, что вы получите вывод в буфер. Но методы отладки разные :) Мне нравится использовать регистратор, потому что я использую его в большинстве сервисов. –

Смежные вопросы