EasyAdmin3:将附加变量传递给twig-template(编辑页面)

问题描述 投票:0回答:1

背景

我想在编辑页面中显示与实体无关的信息。根据官方文档可以用

configureResponseParameters
函数解决。

问题

所以我将该功能实现到我的 CRUD 控制器中。

  • 在 INDEX 树枝模板上:我可以使用/查找变量
  • 在编辑树枝模板上:我无法使用/查找变量

知道为什么吗?

如何实现将数据传递到我的 EDIT-twig 模板?非常感谢!

我的文件

PersonCrudController.php

class PersonCrudController extends AbstractCrudController {
    public function configureCrud(Crud $crud): Crud {

        $crud->setFormThemes([
            'mystuff/person_edit_form.html.twig', '@EasyAdmin/crud/form_theme.html.twig'
        ]);

        return $crud;
    }

    public function configureFields(string $pageName): iterable {
        // ...
        yield TextField::new('specialDisplay')->setFormTypeOption('mapped', false);
        // ...
    }

    public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore
    {
        $responseParameters->set('testtesttest', '123xyz');
        return $responseParameters;
    }
    // ...
}

mystuff/person_edit_form.html.twig

{% block _Person_specialDisplay_row %}
    {{ testtesttest }} {# throws: Variable "testtesttest" does not exist. #}
    {{ dump() }}       {# cannot find "testtesttest" anywhere in dump #}

    {# ... here comes the rest that is working perfectly ... #}
{% endblock %}
symfony twig parameter-passing crud easyadmin
1个回答
0
投票

我遇到了类似的问题,因为我的想法是将一些变量从 CRUD 控制器传递到

edit
模板,这样我就可以从自定义表单模板访问它,该模板覆盖编辑视图中的字段,这可能有意义但有一个问题:

configureResponseParameters
提供了动作模板将接收的变量,在本例中它是
crud/edit
模板,这意味着返回
configureResponseParameters
的变量是在整个动作模板twig上下文中设置的,这完全是与我们想要传递变量的单个表单字段的 twig 上下文不同。这就是为什么在自定义块中进行转储时,设置的变量不会出现的原因;我们正在自定义的块将不会接收设置的变量,因此无法从表单访问它们。

对于我在

docs 中读到的内容,我理解 configureResponseParameters

 旨在覆盖整个模板时使用,并且它是有意义的,因为如果您想将一些变量传递给 CRUD 操作模板,是因为您是打算定制多种东西。因此,如果您想访问 
configureResponseParameters
 中设置的变量,您将需要覆盖操作模板(在本例中为 
crud/edit
)并从那里访问它:

{# original template from EasyAdminBundle #} {% extends '@!EasyAdmin/crud/edit.html.twig' %} {% block main %} {# your setted vars are going to appear here #} {{ dump() }} {# the original template contents are rendered with parent() #} {{ parent() }} {# imagePreviewSrc was my setted var so you can access to it in this way, for example #} <img id="preview" {% if imagePreviewSrc %} src="{{imagePreviewSrc}}" {% endif %} alt="Preview"> {{block('rest_of_blocks_you_want_to_include')}} {% include 'or_any_other_file.html.twig' %} {% endblock %}
正如您提到的,数据独立于您正在编辑的实体,无需声明字段来呈现您想要的数据,因为字段用于实体属性,因此此解决方案可能适合您。

--

我的情况发生了什么?

我意识到我想要的是渲染一个实际上属于我的实体的属性,因此通过设置一个具有其链接属性的字段,我最终通过访问 twig 上下文来检索我想要传递给模板的变量我正在定制的表单主题;请记住,我们处于与

entity

 相对应的 
edit 视图中,因此,如果您想要包含一些变量来自定义表单,则实体可能已经具有此值,因此将其传递到某个字段你会做一些定制,比如this

© www.soinside.com 2019 - 2024. All rights reserved.