事件监听器和调试工具栏

时间:2014-01-02 14:48:41

标签: php symfony propel event-listener

当我激活事件监听器时,我的调试工具栏崩溃了。这是我的事件监听器的代码。

class PermisoListener {

private $container;

public function __construct(ContainerInterface $container = null) {
    $this->container = $container;
}

public function onKernelRequest(GetResponseEvent $event) {
    $request = $this->container->get('request');
    $ruta = $request->get('_route');
    if ($this->container->get('security.context')->isGranted('ROLE_USUARIO')) {
        $usuario = $this->container->get('security.context')->getToken()->getUser();
        $horario = HorarioQuery::create()
                ->filterByDiaId(date('N'))
                ->useUsuarioHorarioQuery()
                ->filterByUsuarioId($usuario->getId())
                ->endUse()
                ->findOne();
        if ((!$horario == null) && (date('Hi') >= $horario->getHoraInicio('Hi') ) && (date('Hi') <= $horario->getHoraFin('Hi') )) {
            $menus = MenuQuery::create()
                    ->usePerfilMenuQuery()
                    ->usePerfilQuery()
                    ->useUsuarioPerfilQuery()
                    ->filterByUsuarioId($usuario->getId())
                    ->endUse()
                    ->endUse()
                    ->endUse()
                    ->filterByRuta($ruta)
                    ->findOne();
            if ($menus != null || $ruta == '' || $ruta == 'usuario_bitacora_login' || $ruta == 'pagina_inicio' || $ruta == '_pagina_inicio' || $ruta == 'usuario_bitacora_logout') {
                return;
            } else {

                $event->setResponse($this->container->get('templating')->renderResponse('VelfasaSoporteBundle:Default:portada.html.twig'));
            }
        } else {
            $bitacora = new Bitacora();
            $bitacora->setUsuarioId($usuario->getId());
            $bitacora->setDescripcion('Error, Horario de trabajo no válido ');
            $bitacora->setFechaYHora(date('Y-m-d H:i:s'));
            $bitacora->setDireccion($this->container->get('request')->getClientIp());
            $bitacora->setEstado(0);
            $bitacora->save();
            $this->container->get("request")->getSession()->invalidate();
            $this->container->get("security.context")->setToken(null);
            $event->setResponse($this->container->get('templating')->renderResponse('::error.html.twig', array('error' => 'Error, inicio de sesion en hora no laboral')));
        }
    }else{
        return;
    }
}

}

就像你可以看到代码什么时候没有发生任何我发送空回报。一切都很好,但这不显示Symfony2调试工具栏,我真的需要它。

请帮忙

2 个答案:

答案 0 :(得分:1)

要查看Symfony2调试栏,您必须返回包含<body>标记的回复。

Web Profiler搜索响应的<body>标记(通常来自模板)并更新它以包含探查器。

因此,在您的控制器中,响应是您从操作方法返回的内容:

  • 填充预定模板的array
  • 包含HTML文本的Response对象

其中任何一个都可以包含Web Profiler事件侦听器将修改的body标记。

将每个return;替换为return new Response('<body></body>');

答案 1 :(得分:0)

你只需要使用“返回”;事件侦听器捕获的路由是“_wdt”