我正在创建配置的维护页面。
我创建了一个事件订阅者:
public function onKernelRequest(RequestEvent $event)
{
$maintenance = $this->container->hasParameter('maintenance') ? $this->container->getParameter('maintenance') : false;
$underMaintenanceUntil = $this->container->hasParameter('underMaintenanceUntil') ? $this->container->getParameter('underMaintenanceUntil') : false;
if (!$event->isMasterRequest()){
return;
}
$debug = in_array($this->container->get('kernel')->getEnvironment(), ['test','dev']);
$uri = $event->getRequest()->getRequestUri();
if ($uri == '/login' || $uri == '/logout') {
return;
}
if ($maintenance && !$debug && !$this->container->get('security.authorization_checker')->isGranted('ROLE_ADMIN')) {
$engine = $this->container->get('twig');
$content = $engine->render('pages/maintenance.html.twig', array('underMaintenanceUntil' => $underMaintenanceUntil));
$event->setResponse(new Response($content, 503));
$event->stopPropagation();
}
}
并且探查器栏不起作用。我明白了
加载 Web 调试工具栏时出错。
在日志中:
[申请] 10月5日 08:24:41 |INFO | 请求匹配的路由“_wdt”。method="GET" request_uri="https://localhost:8001/_wdt/914ef7" route="_wdt" route_parameters={"_controller":"web_profiler.controller.profiler::toolbarAction","_route":"_wdt" ,"token":"914ef7"} [应用] Oct 5 08:24:41 |CRITICA| 请求未捕获的 PHP 异常 Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException:“令牌存储不包含身份验证令牌。一个可能的原因可能是没有为此 URL 配置防火墙。” 在 /home/marcin/projects/indali/vendor/symfony/security-core/Authorization/AuthorizationChecker.php 第 52 行
即使我输入/login
page 我也会得到同样的错误。如果它是登录uri,这if ($uri == '/login' || $uri == '/logout') {return;}
是否应该防止不执行进一步的代码?
这$this->container->get('security.authorization_checker')->isGranted('ROLE_ADMIN')
会产生我的错误,因为在开发防火墙中没有身份验证令牌。我可以检查令牌是否存在,但为什么我的代码不起作用?