Шаблоны управления клиентом Symfony

Скажем, у меня есть страница, контент обновляется в бэк-офисе (простой администратор). Я хочу, чтобы клиент мог выбирать между двумя типами шаблонов в админке, и это создает страницу с тем же контентом, но с выбранным шаблоном, как это возможно ?

Я даже не знаю с чего начать? Поиск по ключевым словам шаблона вообще не дает ответа на этот вопрос. Какое ключевое слово набрать, чтобы найти примеры?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
0
30
1

Ответы 1

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

public function someAction(){
  $someEntity = $this->getDoctrine->getRepository(SomeEntity::class)->findBy([...]);

  ...

  return $this->render($someEntity->getSelectedTemplatePath(), [
      ...
    ]);
}

Другие варианты включают в себя перемещение логики в ветку и условный выбор родительского элемента для расширения и / или выбор фрагмента (ов) шаблона для включения на основе переданной переменной (ссылка на выбор постоянного шаблона). Это будет лучше, если в шаблонах есть лишь небольшие различия и вы хотите исключить повторяющийся код.

Вы также можете организовать свои шаблоны в соответствии с выбранным названием темы и переключаться между набором шаблонов.

Структура каталогов:

└───templates
│   └───default
│   │   │   _logo.html.twig
│   │   │   index.html.twig
│   │   │   other.html.twig
│   │   
│   └───alternate
│       │   _logo.html.twig
│       │   index.html.twig
│       │   other.html.twig

Контроллер:

private $theme;

public function __construct(){
  $this->theme = 'default';
  $someEntity = $this->getDoctrine->getRepository(SomeEntity::class)->findBy([...]);
  if ($someEntity){
    $this->theme = $someEntity->getTheme() ?? 'default';
  }
}

public function someAction(){
  ...

  return $this->render($this->theme . '/index.html.twig', [
      ...
    ]);
}

public function someOtherAction(){
  ...

  return $this->render($this->theme . '/other.html.twig', [
      ...
    ]);
}

Другие вопросы по теме