我想在编辑页面中显示与实体无关的信息。根据官方文档可以用
configureResponseParameters
函数解决。
所以我将该功能实现到我的 CRUD 控制器中。
知道为什么吗?
如何实现将数据传递到我的 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 %}
我遇到了类似的问题,因为我的想法是将一些变量从 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。