Управление различными базовыми шаблонами из базы данных в Symfony - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь управлять несколькими шаблонами в Symfony.Активный Шаблон поступает из базы данных, и у меня есть контроллер, который дает правильный путь.

Моя проблема - сообщить Symfony об этом пути.Я искал метод рендеринга Twig в нескольких классах, но изменения не увенчались успехом.

My TemplateController.php

public function loadtpl() {

    $repo = $this->getDoctrine()->getRepository(Templates::class);
    $found = $repo->findByActive(1);
    $tpl = $found[0]->getPath();
    return $tpl;

}

Это дает мне путь к шаблону, но я не могу сказать Symfony оэто.

ОБНОВЛЕНИЕ:

Что у меня есть - 2 разных макета, расположенных в шаблонах / layout1 и template / layout2

Что я получаю - мой TemplateController (выше) возвращает путь активного макета (layout1 /)

Теперь я могу отредактировать свой twig.yaml, указав twig путь моего шаблона в ../templates/layout1, чтобы я мог использовать render(mysite.html.twig);, который находится в layout1 (и layout2), но это не то, что я хочу.

То, что я хочу - я хочу динамически расширять путь базового шаблона с моими путями макета, чтобы яможно использовать метод render (mysite.html.twig) без ручного редактирования twig.yaml.

Что мне нужно - мне нужен класс twig или symfony для редактирования основного метода render()но я не могу найти нужный файл.ИЛИ: У кого-нибудь есть идея, которая лучше всего решит эту проблему.

1 Ответ

0 голосов
/ 02 февраля 2019

Функция рендеринга ожидает следующие параметры:

/**
 * Renders a view.
 *
 * @param string   $view       The view name
 * @param array    $parameters An array of parameters to pass to the view
 * @param Response $response   A response instance
 *
 * @return Response A Response instance
 *
 * @final since version 3.4
 */

Так что, если вы передадите правильное имя представления: @BUNDLE_NAME:RESOURCE_NAME_FOLDER:TWIG_FILE, тогда все будет хорошо.

ОБНОВЛЕНИЕ:

Я думаю, что понимаю, что вам нужно после того, как вы предоставили более подробную информацию.Поскольку не было приведено ни одного примера, я попытаюсь работать с реалистичным сценарием.

Представьте, что у вас есть 2 шаблона: синий и красный, они имеют различия в структуре и цвете, но содержание в основном одинаковое.Тогда в моей папке с шаблонами будет 2 директории.

/app
  /Resources
    /views
      /blue
        base_template.html.twig
      /red
        base_template.html.twig (they can have different names it doesn't really matter)

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

Теперь на вашем контроллеревы получаете значение base_template из БД, как уже делает ваша функция.

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

public function indexAction()
    {
        return $this->render('AppBundle:Home:index.html.twig',["base_template"=>loadTpl()]);
    }

Наконец, в вашем файле ветки вы бы расширили шаблон следующим образом:

{% extends base_template %}
{% block content %}
<div class="container">
    My content
</div>
{% endblock %}

Вот ссылка на: Динамическое наследование веток

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