2013-07-04 64 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-b​​ind()'從Symfony 2.3開始已經過時,並且預計在3.0中被刪除。應該在新版本中使用'$ form-> handleRequest($ request)'。 – tftd

相關問題