您可以设置形式action
动态使用几个不同的方法。
首先,你可以通过动作到模板的变量是每个父模板喜欢不同..
new.html.twig
{{ include('AcmeBundle:Form:_form.html.twig',
{'form': form, 'action': path('create_route') }) }}
edit.html.twig
{{ include('AcmeBundle:Form:_form.html.twig',
{'form': form, 'action': path('edit_route', {'id': form.vars.value.id }) }}
// Or the actual object id if the object has been passed to the template
_form.html.twig
{{ form_start(form, {'action': action }) }}
或者您可以检查当前对象中是否存在id,然后根据该值设置操作。此版本确实使得模板的可重用性稍差,因为该操作是硬编码的,但如果您打算为多个不同的页面使用相同的表单,则这只是一个问题。
_form.html.twig
{% set action = form.vars.value.id is null
? path('create_route')
: path('edit_route', {'id': form.vars.value.id })
%}
{{ form_start(form, {'action': action }) }}
注:字符串已拆分为多行以提高可读性。
hi @Jd patel,您可以使用[Symfony doc](http://symfony.com/doc/current/book/forms.html#form-theming)来覆盖表单的默认布局,我希望这会帮助您自定义您的表单输出。 – kuldipem 2014-10-08 06:48:01
如果您在渲染时遇到问题,例如:您在编辑表单中从创建表单中删除了一个字段,然后每次检查该字段是否已定义,例如:{%if form.task defined%} {{ form_row(form.task)}} ... {%endif%}。如果你在后端有问题,那么你必须使用eventlisteners.see http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#customizing-your-form-based-on-the-底层数据 – user2268997 2014-10-08 07:31:03