2013-07-04 32 views
14

Tôi có một hình thức như dưới đây:Làm thế nào để thay đổi giá trị trường mẫu trong 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, 
     )); 
    } 
} 

chỉnh sửa hành động của tôi

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

Trong khi tôi đang chỉnh sửa một mục, Làm thế nào tôi có thể thay đổi giá trị trường mẫu bên trong bộ điều khiển trước khi render nó?

+1

Bạn có thể làm gì trong bạn trường hợp: $ form-> get ('fieldName') -> setData ('my_value'); Điều này cũng hoạt động đối với Symfony 3. – TodStoychev

Trả lời

51

Bạn có thể sử dụng setData() để thiết lập dữ liệu về lĩnh vực hình thức trong Symfony, như thế này:

$form = $formBuilder->getForm(); 

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

Bạn có thể vui lòng cung cấp cho tôi một ví dụ không? – dextervip

+0

Tôi đã cập nhật câu trả lời của mình! –

+1

Tôi chỉ muốn nói rằng phương pháp này là làm việc cho tôi khi tôi không cung cấp thực thể để hình thành, nếu không điều này sẽ giúp http://stackoverflow.com/questions/13249485/symfony2-setting-the-value-of-a- form-field-outside-the-form-bên trong-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

Tôi cần thay đổi nó bên trong hoạt động của bộ điều khiển – dextervip

+0

ở đâu là hành động của bộ điều khiển? – Ron

+0

Tôi vừa thêm nó – dextervip

3

Bạn có thể thay đổi giá trị thẻ trong bộ điều khiển:

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

'$ form-bind()' đã lỗi thời kể từ Symfony 2.3 và dự kiến ​​sẽ bị xóa trong 3.0. Người ta nên sử dụng '$ form-> handleRequest ($ request)' thay vào đó trong các phiên bản mới hơn. – tftd

Các vấn đề liên quan