我已经阅读了Symfony 2文档,我正在尝试制作一个自定义的嵌入表单,但我无法理解文档中提供的代码。官方文件:http://symfony.com/doc/current/cookbook/form/form_customization.html
具体来说,我不理解的代码是:
{% form_theme form _self %}
{% block _tasks_entry_widget %}
<tr>
<td>{{ form_widget(task.task) }}</td>
<td>{{ form_widget(task.dueDate) }}</td>
</tr>
{% endblock %}
经过多次测试,我注意到"_task_entry"是嵌入表单的名称(而不是主表单中字段的名称)
现在我正试图得到什么是"任务"变量{{ form_widget(task.dueDate) }}
我再次尝试使用嵌入的表单名称、实体字段的名称和主表单变量的名称,但都不起作用:
{% form_theme edit_form.lineas _self %}
{% block zb_gestionbundle_lineaalbaran_widget %}
<div class="large-1 small-1 columns">
{{ form_widget(form.cantidad) }}
</div>
<div class="large-8 small-8 columns">
{{ form_widget(form.concepto) }}
</div>
<div class="large-2 small-2 columns">
{{ form_widget(form.precio) }}
</div>
{% endblock %}
{{ form_label(edit_form.lineas) }}
{{ form_errors(edit_form.lineas) }}
{{ form_widget(edit_form.lineas) }}
总之,我需要在{{ form_widget(form.cantidad) }}
中放入什么才能使代码正常工作?
Tyvm
一种可能的解决方案:
经过更多的研究,我发现了有效的代码
{% form_theme edit_form _self %}
{% macro prototype(linea) %}
<div class="large-1 small-1 columns">
{{ form_widget(linea.cantidad) }}
</div>
<div class="large-8 small-8 columns">
{{ form_widget(linea.concepto) }}
</div>
<div class="large-2 small-2 columns">
{{ form_widget(linea.precio) }}
</div>
{% endmacro %}
{% for linea in edit_form.lineas %}
{{_self.prototype(linea)}}
{% endfor %}
我不知道文档是否有错,我对文档的疑问留有答案。
您的解决方案有效!只是为了完成,我遇到了同样的问题,但文档是正确的!只是有点难以理解。(在我看来)。
使用文档解决方案:
-
你必须知道你的embbeded表单的unique_block_prefix。
要做到这一点:将其添加到您的代码{{dump(form)}}中,并搜索嵌入表单的unique_block_prefix。 -
那么你只需要替换这样的文档示例:
{% form_theme form _self %}
{% block _zb_gestionbundle_lineaalbaran_entry_widget %}
<div class="large-1 small-1 columns">
{{ form_widget(form.cantidad) }}
</div>
<div class="large-8 small-8 columns">
{{ form_widget(form.concepto) }}
</div>
<div class="large-2 small-2 columns">
{{ form_widget(form.precio) }}
</div>
{% endblock %}
<!--block with your html/twig code, form, etc ..-->
{% block your_main_block %}
...
<!--your form-->
...
<!-- the embbeded part -->
{{form_row(form.lineas)}}
...
{% endblock %}
综上所述,unique_block_prefix通常为_(嵌入表单的id)_entry_widget
你只需要像doc的例子一样替换
我希望你能理解,我什么都不错过(对不起我的英语…)。