自定义嵌入式表单symfony 2

时间:2015-11-05 16:35:40

标签: php forms symfony prototype

我已阅读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 %}
经过多次测试后,我发现&#39; _task_entry&#39;是嵌入表单的名称(不是主表单中的字段名称)

现在,我正试图了解“&#39;”任务的主要内容。变量,{{ 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 %}

我不知道文档是否错误,我对答案保持开放,对文档有疑问。

1 个答案:

答案 0 :(得分:0)

您的解决方案有效!刚刚完成,我有同样的问题,但文档是正确的!只是有点难以理解。(在我看来)。

使用文档解决方案:

  • 您必须知道嵌入表单的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
而你只需要替换文档的例子 我希望你理解,我什么都不想(对不起我的英语......)。

相关问题