Symfony 3.4 — рендеринг пользовательских представлений при каждой загрузке страницы



У меня есть большое приложение, использующее SF 3.4, и мне нужно найти лучший способ выполнения пользовательского рендеринга на основе пользователей при каждой загрузке страницы.

Прямо сейчас у нас есть слушатели для бокового меню, нижнего колонтитула, избранного бокового меню, меню приложений и независимо от того, истек ли ваш тайм-аут. Эти слушатели запускают событие темы через функцию рендеринга, которая добавляет информацию, относящуюся к доступу пользователей/избранному/если время ожидания истекло. Это невозможно сделать с ролями в twig, потому что у нас есть такие вещи, как избранное в меню, которые постоянно меняются.

Мы переопределяем метод рендеринга Controller для отправки этого события темы и array_merge того, что мы получаем обратно с массивом параметров функции рендеринга следующим образом:

  protected function render($view, array $parameters = array(), Response $response = null)
  {
        $themeEvent = new ExampleThemeEvent($this->getUser(), $this->getMyMenuApplication());

        $result = $this->getDispatcher()->dispatch(ExampleThemeEvent::NAME, $themeEvent);

        $parameters = array_merge($result->getModel(),$parameters);

      return parent::render($view, $parameters, $response);
  }

Из-за этого большинство наших контроллеров расширяют ExampleThemeController, а не просто Controller, поэтому каждая страница, которую мы хотим иметь, имеет эти функции.

Это работает нормально, но метод рендеринга помечен как окончательный в SF 3.4, и его не следует переопределять. Как лучше всего подойти к этому, не переопределяя метод рендеринга? Есть ли другое место, куда я могу отправить событие нашей темы?
Мы пытались использовать подписчиков/слушателей onKernelController безрезультатно, потому что нам нужно добавить в контейнер дополнительные параметры представления, что невозможно сделать в данный момент.

Спасибо!


person ckifer    schedule 20.02.2018    source источник


Ответы (1)


Для таких пользовательских изменений, которые выходят за рамки передачи глобальных переменных в twig, я бы проверил встраивание контроллеры. Вы можете отобразить часть своего ответа с помощью другого контроллера, отвечающего, например, только за избранное.

person Maerlyn    schedule 20.02.2018