2013-07-04 1 views
14

У меня есть форма, как показано ниже:Как изменить значение поля формы в Symfony 2

class ItemType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      // ... 
      ->add('tags','text',array(
       'required' => false, 
       'attr' => array('name' => 'tags'), 
       'mapped' => false)) 
     ; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'MyBundle\ItemBundle\Entity\Item', 
      'cascade_validation' => true, 
     )); 
    } 
} 

Мой редактировать действие

public function editAction(Request $request, $id) { 
    $em = $this->getDoctrine()->getManager(); 
    $entity = $em->getRepository('MyBundleItemBundle:Item')->find($id); 
    $form = $this->createForm(new ItemType(), $entity); 
    //$form->get('tags')->setValue('test text'); 
    // ^- this is what i would like to do -^ 
    // ... 
} 

В то время как я редактирую элемент, Как я могу изменить значение поля формы внутри контроллера перед его рендерингом?

+1

Вы можете сделать в вашем case: $ form-> get ('fieldName') -> setData ('my_value'); Это работает также для Symfony 3. – TodStoychev

ответ

51

Вы можете использовать setData() установить данные по полям формы в Symfony, как это:

$form = $formBuilder->getForm(); 

$form->get('firstname')->setData('John'); 
+0

Не могли бы вы привести мне пример? – dextervip

+0

Я обновил свой ответ! –

+1

Я просто хочу сказать, что этот метод работает для меня, когда я не предоставляю сущность для формирования, иначе это поможет http://stackoverflow.com/questions/13249485/symfony2-setting-the-value-of-a- form-field-outside-the-form-inside-a-controlle/21039877 # 21039877 –

1
class ItemType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ... 
      ->add('tags','text',array(
       'required' => false, 
       'attr' => array('name' => 'tags','value'=>'newvalue'), 
       'mapped' => false)) 
     ; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'MyBundle\ItemBundle\Entity\Item', 
      'cascade_validation' => true, 
     )); 
    } 
} 
+0

Мне нужно изменить его внутри действия контроллера – dextervip

+0

где действие контроллера? – Ron

+0

Я только что добавил – dextervip

3

Вы можете изменить значение метки в контроллере:

$request = $this->get('request'); 
    if ($request->getMethod() == 'POST') 
{ 
    $form->bind($request); 
    if $form->isValid()) 
    { 
     $entity->setTags('test'); 
     //persist ... 
    } 
} 
+1

'$ form-bind()' устарел с Symfony 2.3 и, как ожидается, будет удален в 3.0. В более новых версиях следует использовать '$ form-> handleRequest ($ request)'. – tftd

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