2013-07-04 12 views
14

Ich habe eine Form wie folgt ändern:Wie Formularfeldwert 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, 
     )); 
    } 
} 

Meine bearbeiten Aktion

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

Während ich ein Element bin der Bearbeitung, Wie kann ich Formularfeldwert ändern innerhalb des Controllers vor dem Rendern?

+1

Sie können in tun, um Ihre Fall: $ form-> get ('fieldName') -> setData ('mein_wert'); Dies funktioniert auch für Symfony 3. – TodStoychev

Antwort

51

können Sie setData() verwenden, um Daten auf Formularfelder in Symfony zu setzen, wie folgt aus:

$form = $formBuilder->getForm(); 

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

Könnten Sie mir bitte ein Beispiel geben? – dextervip

+0

Ich habe meine Antwort aktualisiert! –

+1

Ich möchte nur sagen, dass diese Methode für mich funktioniert, wenn ich keine Entität zur Verfügung stelle, sonst hilft dies 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

Ich muss es in der Controller-Aktion ändern – dextervip

+0

wo ist die Controller-Aktion? – Ron

+0

Ich habe es soeben hinzugefügt – dextervip

3

Sie können Tags Wert in der Steuerung ändern:

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

'$ form-bind()' ist seit Symfony 2.3 veraltet und wird voraussichtlich in 3.0 entfernt. In den neueren Versionen sollte stattdessen '$ form-> handleRequest ($ request)' verwendet werden. – tftd