我想高度自定义EntityType的选择标签,例如创建具有模型的多个属性的表。
所以我想访问我的选择类属性。这些选择是我的MyClass
类到EntityType
类的实体。如何在树枝上这样做?
目前我是这样的:
1。在我的FormClass中json_encode
我在标签中需要的所有字段
2。。在我的模板中,json_decode
这些信息并按照
输入代码:
1。
$builder
->add('field', EntityType::class, [
'class' => MyClass::class,
'multiple' => false,
'expanded' => true,
],
'choice_label' => function (MyClass $myClass) {
$data = [
'name' => $myClass->getName(),
'description' => $myClass->getDescription(),
];
return json_encode($data);
},
])
2。
{% block my_form_widget %}
...
{# form is my 'field' FormView of the EntityType #}
{% for child in form %}
{# child is a FormView, one choice of my EntityType #}
{# child.vars.data is boolean as its a checkbox #}
{% set data = child.vars.label|json_decode %}
create some complex html here, like tables
...
{% endfor %}
...
{% endblock %}
工作。但是有更好的方法吗?
谢谢, 金
答案 0 :(得分:0)
在映射到实体的Symfony表单(或表单字段,仅是其自身的表单)中,您始终可以访问form.vars.data
中的基础数据。因此,在这种情况下,form.vars.data
将是null
或MyClass
的实例。
为便于在模板中使用,您可以执行以下操作:
{% set my_object = form.field.vars.data %}
{% if my_object %}
{{ my_object.getName() }}
{{ my_object.getDescription() }}
{% endif %}
因此,无需重新编码视图层的实体数据,因为它始终已经可用。
如果您正在使用EntityType
,并且想要访问每个选择实体的属性,则它们也可以在choices
数组中使用:
{% for choice in form.field.vars.choices %}
{{ choice.data.getName() }}
{{ choice.data.getDescription() }}
{% endfor %}
当您尝试访问任何表单数据并且不确定要查找的位置时,一个不错的技巧就是在模板中临时添加一行:
{{ dump(form.field) }}
这将使您浏览可用数据并查看所有可用数据。请注意,它要求启用Twig调试扩展,并在PHP中启用XDebug,以使输出看起来不错。
答案 1 :(得分:0)
好吧,这是一个如何在树枝中访问EntityType选择的数据的示例。您可以检查child.parent.vars.choices
列表。
{% block my_form_widget %}
...
{# form is my 'field' FormView of the EntityType #}
{% for child in form %}
{# child is a FormView, one choice of my EntityType #}
{# child.vars.data is boolean as its a checkbox #}
{% for choice in child.parent.vars.choices if choice.value == child.vars.value %}
{{ choice.data.name }} {# contains MyClass name #}
{{ choice.data.description }} {# contains MyClass description #}
{% endfor %}
...
{% endfor %}
...
{% endblock %}