2013-07-04 13 views
14

mam postać jak poniżej:Jak zmienić wartość pola formularza w 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, 
     )); 
    } 
} 

Moja edit działanie

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

Chociaż ja edytowania elementu, Jak mogę zmienić wartość pola formularza wewnątrz kontrolera przed renderowaniem?

+1

można robić w case: $ form-> get ('fieldName') -> setData ('my_value'); Działa to również dla Symfony 3. – TodStoychev

Odpowiedz

51

Można użyć setData() ustawić dane dotyczące pól formularzy w Symfony, tak:

$form = $formBuilder->getForm(); 

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

Czy mógłbyś podać mi przykład? – dextervip

+0

Zaktualizowałem moją odpowiedź! –

+1

Chcę tylko powiedzieć, że ta metoda działa dla mnie, gdy nie dostarczam podmiotu do utworzenia, w przeciwnym razie pomoże to http://stackoverflow.com/questions/13249485/symfony2-setting-the-value-ofa-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

Muszę to zmienić wewnątrz działania kontrolera – dextervip

+0

gdzie jest działanie kontrolera? – Ron

+0

Właśnie dodałem to – dextervip

3

Można zmienić wartość znaczników w sterowniku:

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

'$ form-bind()' jest przestarzałe od Symfony 2.3 i oczekuje się, że zostanie usunięte w wersji 3.0. Zamiast nich należy użyć '$ form-> handleRequest ($ request)' w nowszych wersjach. – tftd

Powiązane problemy