2014-10-08 91 views
0

我已经开始使用symfony。相同的自定义表单编辑和创建页面symfony

我面临创建和编辑表单自定义的问题。

我已经创建了一个具有crud的实体。现在,我想自定义“创建表单” new.html.twig,我与

{{ form_start(form) }} 
    {{ form_errors(form) }} 

    {{ form_row(form.task) }} 
    {{ form_row(form.dueDate) }} 
{{ form_end(form) }} 

我的问题是“编辑表单”这样做的:我应该怎么做,我可以使用相同的自定义表单不重复?

在此先感谢..

+0

hi @Jd patel,您可以使用[Symfony doc](http://symfony.com/doc/current/book/forms.html#form-theming)来覆盖表单的默认布局,我希望这会帮助您自定义您的表单输出。 – kuldipem 2014-10-08 06:48:01

+0

如果您在渲染时遇到问题,例如:您在编辑表单中从创建表单中删除了一个字段,然后每次检查该字段是否已定义,例如:{%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-b​​ased-on-the-底层数据 – user2268997 2014-10-08 07:31:03

回答

0

您可以设置形式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 }) }} 

注:字符串已拆分为多行以提高可读性。

相关问题