2013-07-04 11 views
14

Ho una forma come di seguito:Come cambiare il valore del campo modulo in 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, 
     )); 
    } 
} 

mia modifica azione

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 -^ 
    // ... 
} 

Mentre io sono l'editing di un elemento, come posso cambiare il valore del campo modulo all'interno del controller prima di renderlo?

+1

Si può fare nella vostra case: $ form-> get ('fieldName') -> setData ('my_value'); Questo funziona anche per Symfony 3. – TodStoychev

risposta

51

È possibile utilizzare setData() per impostare i dati relativi campi del modulo in Symfony, in questo modo:

$form = $formBuilder->getForm(); 

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

Potresti fornirmi un esempio? – dextervip

+0

Ho aggiornato la mia risposta! –

+1

Voglio solo dire che questo metodo funziona per me quando non fornisco l'entità per la creazione, altrimenti questo aiuterà 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

Ho bisogno di cambiarlo all'interno dell'azione del controller – dextervip

+0

dov'è l'azione del controller? – Ron

+0

L'ho appena aggiunto – dextervip

3

È possibile modificare il valore tag nel controllore:

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

'$ form-bind()' è obsoleto da Symfony 2.3 e dovrebbe essere rimosso in 3.0. Uno dovrebbe usare '$ form-> handleRequest ($ request)' invece nelle versioni più recenti. – tftd