Symfony和Twig模板。如何动态扩展模板或什么都不扩展?

TH

让我描述一种情况。您有个人资料表格和用户可以在其中上传个人资料相关文档的表格。由于配置文件表单已经很长,因此文档已移至新表单。

一切正常。现在我们要使用引导程序选项卡来执行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或什么都不做时,是否有一种说法可以扩展此范围?

TH

基本上有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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony和Twig模板。如何动态扩展模板或什么都不扩展?

来自分类Dev

Twig文件路径问题和扩展模板

来自分类Dev

使用APYDataGridBundle显示网格时,Symfony / Twig无法扩展模板

来自分类Dev

symfony php模板扩展了树枝模板

来自分类Dev

Twig / Symfony 2.3.4:扩展存储在数据库中的Twig模板

来自分类Dev

如何从Flask扩展加载模板

来自分类Dev

Django模板扩展了错误的模板

来自分类Dev

Django模板扩展了错误的模板

来自分类Dev

TYPO3扩展和模板问题

来自分类Dev

扩展Drupal Twig模板上的链接字段输出

来自分类Dev

扩展Drupal Twig模板上的链接字段输出

来自分类Dev

如何覆盖树枝扩展中的模板块?

来自分类Dev

如何扩展可变参数模板类

来自分类Dev

如何覆盖树枝扩展中的模板块?

来自分类Dev

如何扩展Jinja块模板并多次使用

来自分类Dev

树枝模板扩展被忽略

来自分类Dev

Django {%扩展%}模板问题

来自分类Dev

C ++:扩展模板类

来自分类Dev

扩展模板以包含js

来自分类Dev

扩展结束模板的字段

来自分类Dev

Django扩展模板

来自分类Dev

Angular 5 模板扩展

来自分类Dev

Symfony:模板,检查base.html.php是否已扩展

来自分类Dev

为什么chrome扩展程序加载除其head和body标签之外的html模板?

来自分类Dev

为什么chrome扩展程序加载除其head和body标签之外的html模板?

来自分类Dev

在 Symfony 中注册 Twig 扩展

来自分类Dev

Symfony Twig 模板:多重嵌入

来自分类Dev

Twig和Symfony2的模板层次结构

来自分类Dev

扩展已在Django中扩展的模板