2016-09-20 19 views
1

充液型的EntityType的領域在我的形式,我有EntityClass類型的字段:如何從PHP

$builder 
    ->add(
     'user', 
     EntityType::class, 
     [ 
      'required' => false, 
      'label' => 'User', 
      'placeholder' => 'Please choose', 
      'choice_label' => 'email', 
      'choice_value' => 'id', 
      'class' => 'AppBundle:User', 
     ] 
    ) 
; 

這個領域工作正常 - 直到我試圖從我的PHP代碼充液它。然後它保持空白,並只顯示「請選擇」。

預填充看起來是這樣的:

$user = $this->userRepository->find(...); 
$form->get('user')->setData($user); 

但它也如果我叫->setData($user->getId()),甚至->setData($user->getEmail())不起作用。

那麼如何預先填寫EntityType類型的字段?

+0

何時何地設置數據? – DonCallisto

+0

此外,是「主要形式」(所以你稱之爲建造者)綁定到一個實體或不是? – DonCallisto

+0

@DonCallisto表單沒有綁定到一個實體,並且當$ form-> isSubmitted()返回false時,它被在控制器中調用的服務填充。 (由於與使用繼承的實體有關係,因此無法將其綁定到實體)。 – Jost

回答

1

您不應該預先填寫Form,如果您需要,您應該預先填寫Model

$user = $this->userRepository->find(...); 

$entity = new YourEntity(); 
$entity->setUser($user); 

$form = $this->createForm(YourEntity::class, $entity); 

這不是關於EntityType。它關於Symfony中的任何類型 - 無法爲它們綁定默認值。數據綁定在Model上。從評論

UPD:這不是真的,這表可以在沒有模式可以使用。它可以在沒有Doctrine實體或任何其他ORM(或不是ORM)實體的情況下使用。但他們仍然使用數據,i.o.與模型。

\的Symfony \分量\表格\ FormFactoryInterface具有定義

public function create($type = 'form', $data = null, array $options = array()); 

所以某種$data是始終存在的,當你使用表單組件。

+0

symfony中的表單與實體完全分離 - 您可以在沒有實體的情況下使用它們。這就是文檔所說的。由於原因(在相關實體中繼承),我無法將模型綁定到表單。 – Jost

+0

這不是事實。表單可以在Doctrine Entity(或任何其他ORM實體)下運行,但它們仍然可以使用某個Model。如果你看到一個FormFactoryInterface,很明顯'public function create($ type ='form',$ data = null,array $ options = array());' - $ data是模型。什麼樣的模式 - 這取決於你。 –

+0

好吧,你是對的 - 數據模型可能是一個簡單的關聯數組。在創建表單時我已經切換到只提供該關聯數組,現在它可以工作。謝謝! – Jost