让我描述一种情况。您有个人资料表格和用户可以在其中上传个人资料相关文档的表格。由于配置文件表单已经很长,因此文档已移至新表单。
一切正常。现在我们要使用引导程序选项卡来执行Profile | 方便用户使用的文档。
现在我知道了,因为如果您提交文档,我们将使用两种不同的形式,那么配置文件中的更改将不会保存,反之亦然。
我已经在标签中使用添加了文档表单
<div role="tabpanel" class="tab-pane" id="documents">
{{ render(controller('ManyAppBundle:Document:createDocument', {'viewOnly': true})) }}
</div>
'viewOnly':true是查询参数,操作不需要。
现在,我的问题是,如果配置文件选项卡呈现了文档模板,则它必须仅显示上载小部件和提交,就像当您直接转到文档页面时一样,它必须显示标题和侧栏以及所有内容。
所以我尝试了
{% if not viewOnly %}
{% extends ... %}
{% endif %}
这带来了问题,因为您不能在if内使用扩展(导致(“节点“ Twig_Node”的节点“ 1”不存在。“)错误)。
其他类似的问题提供了此解决方案
{% extends viewOnly == false ? ... %}
当viewOnly为false时,它必须扩展所有其他模板使用的基本模板,但是如果为true,我只想显示以下内容:
{{ form_start(form, { 'style': 'horizontal', 'col_size': 'sm' }) }}
{% if form.documents is defined %}
{{ form_row(form.documents) }}
{% endif %}
{{ form_row(form.submit, { 'attr': { 'class': 'btn btn-success' } }) }}
{{ form_end(form) }}
但是现在有了顶
{% extends viewOnly == false ? ... %}
如果viewOnly变为true,则失败,找不到模板“”。
有没有办法说扩展此特定模板,这与不扩展任何模板的结果相同?
或者,当viewOnly为false或什么都不做时,是否有一种说法可以扩展此范围?
基本上有3种解决方案来确定如何在树枝模板中扩展不同类型的模板之间进行切换。
第一个将基于非常简单的对或错逻辑。您可以在树枝文件中轻松地执行此操作,如以下示例所示
{% extends entity.isExpired == false ? active.html.twig : expired.html.twig %}
第二个将是@Jeet建议在控制器中执行此操作。这也可以像布尔检查一样简单,但是可以像下面的示例中那样进行其他实体检查一样高级
/* User Controller */
public function showAction($id)
{
$user = $this->get('myapp.repository.user')->findBy($id);
$isUser = $user instanceof User;
if (!$isUser) {
return $this->redirectToBloggersPage();
}
/* $params is what you will normally return to the template */
$params = array (
'user' => $user,
);
if ($user->hasPostedBlog()) {
$params['blog'] = $this->get('myapp.repository.blog')->findByUserLatest($user);
return $this->render('MyAppBundle:User:user_and_blog_view.html.twig', $params);
}
else {
return $this->render('MyAppBundle:User:user_view.html.twig', $params);
}
}
第三个将是@Thomas建议在单独的树枝函数中执行此操作。这将在Twig扩展中完成,您可以在其中插入服务,如以下示例所示
/* Twig extension */
public function extendBookForm()
{
if ($this->getSecurityContext()->isGranted('IS_AUTHENTICATED_FULLY')) {
return "user_view.html.twig";
}
return "public_view.html.twig";
}
/* Twig file */
{% extends extend_book_from() %}
我最初的问题并没有解决我想要的结果。我认为这是不可能的,并且如果您要动态地检查要扩展的内容,则必须始终扩展多个模板,因为您必须为每个结果扩展某些内容。
这些是您可以进行动态模板扩展的不同方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句