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




Вы можете сохранить путь выбранного шаблона в поле сущности, а затем в действии фронт-контроллера получить сущность и прочитать значение поля, чтобы отобразить правильный шаблон.
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', [
...
]);
}