2017-08-02 99 views
0

我想在表單中指定一個默認值,因此創建實體時表單字段具有值(非空或空)。但是,在編輯實體時,顯然應該顯示存儲的值,而不是默認值。如何在Symfony表單中指定默認值

我的實體將自己初始化爲構造的一部分 - 所以當一個實體是新的並且尚未保持時,應該設置這些值。

如何通知FormType使用默認值超過持久狀態?我試過的每件事似乎都暗示它是一種或另一種不是兩種?

這是怎麼做的Symfony 3.2 + ???

編輯|

控制器:

public function newAction (Request $request) 
{ 
    $quoteItem = new QuoteItem(); 

    $form = $this->createForm('UniflyteBundle\Form\QuoteItemType', $quoteItem, ['allow_extra_fields' => true]); 
    $form->add('QuoteFlight', QuoteFlightType::class); 
} 

表格類型:

public function configureOptions (OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
     //'data' => new \UniflyteBundle\Entity\QuoteFlight() 
     'data_class' => QuoteFlight::class 
    ]); 
} 


public function buildForm (FormBuilderInterface $builder, array $options) 
{ 
     $builder 
     ->add('specMajorSetupCharge', null, [ 
     //'empty_data' => QuoteFlight::SPEC_MAJOR_SETUP_CHARGE, 
     'data' => QuoteFlight::SPEC_MAJOR_SETUP_CHARGE, 
     'label' => '* Setups Charge' 
     ]) 
     // ... 
} 
+1

你的代碼是什麼樣的? –

+0

對不起 - 我錯過了:) –

+0

如果我明確設置「數據」,那麼總是在表單中顯示的實質值超過了寫入實體值。我不明白爲什麼實體的構造時不使用實體的默認值 - 而且在實體從數據庫中加載時爲什麼沒有使用實體的默認值 –

回答

2

http://symfony.com/doc/current/components/form.html#setting-default-values

如果你需要你的形式與一些默認值加載(或你正在構建一個「編輯「表單),只需在創建表單構建器時傳入默認數據即可。

$quoteItem = new QuoteItem(); 
$quoteItem->getQuoteFlight()->setSpecMajorSetupCharge(QuoteFlight::SPEC_MAJOR_SETUP_CHARGE). 

$form = $this->createForm(QuoteItemType::class, $quoteItem); 
// ... 

使用data選項是不行的,這是因爲:

http://symfony.com/doc/current/reference/forms/types/form.html#data

數據選項始終覆蓋在渲染時從域數據(對象)採取的值。這意味着,當表單編輯已經存在的對象時,對象值也會被覆蓋,導致表單在提交時丟失它的持久值。

因此,建議在初始化時明確設置帶下劃線對象中的數據,要麼在__constructor()之前,要麼在將對象綁定到窗體之前。

+0

就是這樣:是的:) –

0

要回答我的問題,並避免混淆的人在未來:

$quoteItem = new QuoteItem(); 

// THIS LINE WAS MISSING 
$quoteItem->setQuoteFlight(new QuoteFlight()); 

$form = $this->createForm('UniflyteBundle\Form\QuoteItemType', $quoteItem, ['allow_extra_fields' => true]); 
$form->add('QuoteFlight', QuoteFlightType::class); 

沒有增加的線路QuoteFlight實體爲NULL時期間呈現的形式建立。