2016-12-18 38 views
0

我有简单形式MyForm1如何更改symfony表单元素的顺序?

class MyForm1 extends Symfony\Component\Form\AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 

     $builder->add('field1', TextType::class, [ 
      'label' => 'Field1' 
     ]) 

     $builder->add('save', SubmitType::class, [ 
      'label' => 'Save', 
     ]); 
    } 
} 

和形式MyForm2是从MyForm1

class MyForm2 extends MyForm1 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 

     $builder->add('field2', TextType::class, [ 
      'label' => 'Field2' 
     ]) 
    } 
} 

和模板继承

{{ form(form) }} 

当我显示MyForm2save按钮field2之前显示。我如何改变元素的顺序?我知道我可以删除并再次添加此按钮。或者为模板中的每个元素调用渲染函数。但我只想为元素设置渲染索引。假设它将花费更少的时间。可能吗?

感谢

回答

2

在我看来你的表单字段的顺序是一些相关的看法,而不是模型。所以你应该在你的视图中手动显示你的表单,按字段字段显示。

{{ form_start(form) }} 
    {{ form_row(form.field1) 
    {{ form_row(form.field2) 
    {{ form_row(form.save) 
{{ form_end(form) }} 
+0

是的,我知道它。这是我的懒惰,它需要在窗体和模板中进行更改:) –

2
class MyForm1 extends Symfony\Component\Form\AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 

     $this->buildFields($builder, $options); 

     $builder->add('save', SubmitType::class, [ 
      'label' => 'Save', 
     ]); 
    } 

    public function buildFields(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('field1', TextType::class, [ 
      'label' => 'Field1' 
     ]) 
    } 
} 

class MyForm2 extends MyForm1 
{ 
    // You can actually completely skip this method 
    /*public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 
    }*/ 

    public function buildFields(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildFields(FormBuilderInterface $builder, array $options); 
     $builder->add('field2', TextType::class, [ 
      'label' => 'Field2' 
     ]); 
    } 
} 

您也可以以同样的方式添加buildSubmit,如果你需要。