从Symfony中的数据库管理不同的基础模板

时间:2019-02-02 06:52:28

标签: php symfony templates

我正在尝试在Symfony中管理多个模板。活动模板来自数据库,我有一个提供正确路径输入的控制器。

我的问题是告诉symfony这条路。我在多个类中搜索了Twig渲染方法,但更改未成功。

我的TemplateController.php

public function loadtpl() {

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

}

这为我提供了模板路径,但是我找不到办法告诉symfony。

更新:

我拥有的东西-位于template / layout1和template / layout2中的2种不同的布局

我得到的信息-我的TemplateController(上面)返回活动的布局路径(layout1 /)

现在,我可以编辑twig.yaml以说出我的模板路径到../templates/layout1,这样我就可以使用render(mysite.html.twig);了,它位于layout1(和layout2)中,但不是我想要的。 / p>

我想要的-我想通过布局路径动态扩展基本模板路径,以便无需手动编辑twig.yaml就可以使用render方法(mysite.html.twig)。 / p>

我需要的-我需要使用树枝或symfony类来编辑主要的render()方法,但找不到正确的File。或者:任何人都有一个更好的解决此问题的想法。

1 个答案:

答案 0 :(得分:2)

渲染功能需要以下参数:

/**
 * 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,您可以在其中设置模板的导入和其他详细信息。

现在,在您的控制器上,您已经可以从DB中获得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 %}

这是指向Twig Dynamic Inheritance

的链接