2016-01-29 49 views
1

假設下面的代碼:形式configureOptions()設置數據類

class MyInventory extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('uom') 
      ->add('min') 
      ->add('max') 
      ->add('price') 
      ->add('number') 
      ->add('description') 
     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'MyCompany\MyBundle\Entity\Inventory' 
     )); 
    } 
} 

什麼是「data_class」設置爲有關實體的字符串命名空間/類名的目的是什麼?爲什麼不實例化實體並注入它?我假設表單類現在神奇地爲你做了這些 - 但是通過服務和DiC可以達到同樣的效果(雖然有點更清楚或者根據Symfony規範)。

只是好奇嗎?

+0

你應該檢查表單文檔的部分:[設置data_class](http://symfony.com/doc/current/book/forms.html) – felipsmartins

回答

2

我的猜測是Symfony Forms將加載類的元數據,因此它可以在稍後執行驗證和數據複製。它並不真的需要一個實例 - 只是元數據。

+0

好點...根據文檔,這是一個要求時處理嵌入式表單 - 非常酷! –