我正在尝试在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。或者:任何人都有一个更好的解决此问题的想法。
答案 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 %}
的链接