2015-08-19 2 views
4

Новое на symfony2, у меня есть простая таблица с 2 полями.Symfony2: установить значение по умолчанию из базы данных в форме выбора переключателей?

В alert поле булево, я объявил форму, как это:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder         
     ->add('message', 'text', array('label' => "Message"))     
     ->add('alert', 'choice', array(
       'choices' => array(1 => 'Yes', 0 => 'No'), 
       'expanded' => true, 
       'multiple' => false, 
       'label'  => "Are you agree?", 
       'attr'  => array('class' => 'well') 
     )); 
} 

Это работает, когда я создаю новую запись, но когда я пытаюсь изменить запись, то «предупреждение» выбор хранится в базе данных, не устанавливается в форме (переключатель).

Как установить состояние базы данных в форме?

+0

ли форма сущность? – Moucheg

ответ

3

У вас есть 2 варианта.

Попробуйте использовать атрибут data в формообразователе.

$builder         
     ->add('message', 'text', array('label' => "Message"))     
     ->add('alert', 'choice', array(
       'choices' => array(1 => 'Yes', 0 => 'No'), 
       'expanded' => true, 
       'multiple' => false, 
       'label'  => "Are you agree?", 
       'data'  => $entity->getAlert(), 
       'attr'  => array('class' => 'well') 
     )); 

Или: При создании формы в Symfony вы обычно проходите вдоль объекта данных в эту форму. Этот авто заполняет все значения.

$this->createForm(new FormType(), $entity); 
+0

OK, нет ли способа Symfony установить значение базы данных как «данные» автоматически? – sdespont

+0

@sdespont Это делается автоматически ... вам просто нужно получить сущность и установить ее как второй параметр вашего 'createForm', как показано выше. – Moucheg

+0

@Rico Humme Я понимаю, но редактирование поля« entity »для примера не работает, t нужно указать существующее значение базы данных, Symfony просто установите его. В этом случае мне нужно сначала получить значение (если сущность существует), а затем указать значение в поле данных. С моей точки зрения, это не делается автоматически. – sdespont

1

Чтобы завершить ответ Rico Humme, вот как вы могли бы сделать это.

public function myFunc() { 
    .... 
    $entity = $this->getDoctrine() 
     ->getRepository('AcmeFooBundle:Entity') 
     ->find($id); 
    if ($entity) { 
     $form = $this->createForm(new EntityType(), $entity); 
     ... 
    } 
} 

EDIT:

Чтобы завершить мой ответ, вот что EntityType может выглядеть следующим образом:

class EntityType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     //This is just soe 
     $builder->add('alert', 'choice', array(
      'choices' => array(1 => 'Yes', 0 => 'No'), 
      'expanded' => true, 
      'multiple' => false, 
      'label'  => "Are you agree?", 
      'attr'  => array('class' => 'well') 
     )); 
    } 

    public function getName() 
    { 
     return 'entity'; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Acme\FooBundle\Entity\Entity', 
     )); 
    } 

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