当我激活事件监听器时,我的调试工具栏崩溃了。这是我的事件监听器的代码。
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调试工具栏,我真的需要它。请帮忙
答案 0 :(得分:1)
要查看Symfony2
调试栏,您必须返回包含<body>
标记的回复。
Web Profiler搜索响应的<body>
标记(通常来自模板)并更新它以包含探查器。
因此,在您的控制器中,响应是您从操作方法返回的内容:
array
。Response
对象其中任何一个都可以包含Web Profiler事件侦听器将修改的body标记。
将每个return;
替换为return new Response('<body></body>');
答案 1 :(得分:0)
你只需要使用“返回”;事件侦听器捕获的路由是“_wdt”