2016-12-18 37 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,如果你需要。