В моем проекте Symfony я столкнулся со странной проблемой с kernel.request
слушателями событий срабатывает несколько раз, когда встроенные контроллеры Twig используются.
В моем пользовательском прослушивателе событий у меня есть прослушиватель событий, который отправляет ответ о перенаправлении, если существует определенное условие (в данном случае пароль с истекшим сроком действия). Чтобы предотвратить цикл перенаправления, я проверил, были ли мы уже на странице:
if ($event->getRequest()->get('_route') != 'user_change_password') {
$response = new RedirectResponse($this->router->generate('user_change_password'));
$event->setResponse($response);
}
Но это не остановило циклы перенаправления. Пока я не добавил ведение журнала, я понятия не имел, что встроенный контроллер вызовет событие kernel.request
(это очевидно задним числом, поскольку эти встроенные контроллеры работают, отправляя «подзапрос»). У меня есть один встроенный контроллер в базовом шаблоне ветки, который проверяет наличие предупреждающих сообщений и отображает их.
Учитывая вышеизложенное, как я могу
- иметь возможность вставлять динамический контент в базовый шаблон (который расширяют все другие шаблоны), И
- прослушиватели событий
kernel.request
не срабатывают несколько раз.
Несмотря на то, что Symfony предлагает вставлять этот динамический контент в базовые шаблоны с помощью встроенных контроллеров, считается ли это плохой практикой?
Не лучше ли создать расширение Twig для решения этой проблемы? Из того, что я видел, расширения Twig обычно используются только для простых вещей, таких как пример price
в кулинарной книге, хотя я не понимаю, почему это не работает для более сложных вещей, связанных с базой данных. Я просто не уверен, как это сделать.
Примеры приветствуются.
Возможно, связано?: Контроллер Symfony выполняется несколько раз