2013-06-13 19 views
31

Tôi đang tạo biểu mẫu có trường chưa được ánh xạ như được giải thích trong form documentation.Truy cập trường chưa được ánh xạ trong Bộ điều khiển Symfony2

Tuy nhiên khi trong bộ điều khiển hoặc tương tự tôi muốn truy cập nó, hiện nay tôi đang sử dụng các mảng yêu cầu POST và nhận ra từ đó như sau:

$postData = $this->getRequest()->request->get('my_form_name'); 
$unmappedField = $postData['unmapped_field'] 

Tôi chỉ không thể không nghĩ đây là không phải là cách tốt nhất, và tôi không thể tìm thấy bất cứ điều gì trên tài liệu chính thức.

Có cách nào tốt hơn điều này không?

+0

Điều gì về việc gọi get ('unmapped_field') trên đối tượng yêu cầu của bạn? –

+1

Trường dữ liệu chưa được ánh xạ này có chứa đối tượng Entity hay là biểu mẫu của bạn được liên kết với một mảng phẳng? – DonCallisto

Trả lời

56

Bạn có thể truy cập vào lĩnh vực unmapped ở dạng

$unmappedField = $form['unmapped_field']->getData(); 
+0

hoạt động như một nét duyên dáng –

+3

vâng, vâng, nhưng làm thế nào để có được nó một cách dynmically trong một kịch bản mà tôi tạo ra các lĩnh vực năng động unmapped – Dheeraj

+0

Nếu bạn có một hình thức với các loại lồng nhau, nó sẽ là một cái gì đó như '$ unmappedField = $ form ['subtype_name '] [' unmapped_field '] -> getData(); ' – Sam

14

lấy từ symfony doc sf 2,5 (cũng đã thử nghiệm với sf 2.3):

dạng loại:

use Symfony\Component\Form\FormBuilderInterface; 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('task') 
     ->add('dueDate', null, array('mapped' => false)) 


    ->add('save', 'submit'); 
} 

điều khiển:

$form->get('dueDate')->getData(); 
$form->get('dueDate')->setData(new \DateTime()); 

http://symfony.com/doc/current/book/forms.html#creating-form-classes (cuộn xuống một chút)

+0

Tôi không biết rằng' getData' có phần bổ sung 'setData'. Chính xác những gì tôi cần, cảm ơn! – Sam