2016-09-20 4 views
1

В моей форме, у меня есть поле типа EntityClass:Как предварительного заполнения поля типа EntityType из 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 - нет способа привязать значение по умолчанию для них. Данные привязаны к модели.

UPD из комментария: Это неправда, эта форма может использоваться без модели. Он может использоваться без Doctrine Entity или любого другого ORM (или не ORM) Entity. Но они все еще работают с данными, т.е. с моделью.

\ Symfony \ Component \ Form \ FormFactoryInterface имеет

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

Так своего рода $data всегда присутствует, когда вы используете компонент формы.

+0

Формы в symfony полностью отделены от сущности - вы можете использовать их без сущности. Это то, что говорят документы. А по причинам (наследование в связанной сущности) я не могу привязать модель к форме. – Jost

+0

Это неправда. Формы могут работать не обязательно с помощью Doctrine Entity (или любого другого объекта ORM), но они все еще работают с некоторой моделью. Если вы видите FormFactoryInterface, это ясно. 'Public function create ($ type = 'form', $ data = null, array $ options = array());' - $ data - это модель. Какая модель - это зависит от вас. –

+0

Хорошо, вы правы - модель данных может быть простым ассоциативным массивом. Я перешел к простому созданию ассоциативного массива при создании формы, и теперь он работает. Благодаря! – Jost

Смежные вопросы