2013-06-02 26 views
38

Tôi đã sử dụng trình tạo biểu mẫu với Symfony2 và thấy nó khá đẹp. Tôi thấy mình muốn tạo một trang tìm kiếm với một loạt các hộp ở trên cùng để lọc kết quả tìm kiếm. Tôi có ba thực thể khác nhau như bây giờ (thẩm phán, phiên dịch, luật sư). Tôi muốn người dùng có thể nhập một phần hoặc tên đầy đủ và yêu cầu họ tìm kiếm tất cả các thực thể. Tôi có thể xử lý phần tìm kiếm thực tế, nhưng thế hệ trình tạo biểu mẫu là điều khiến tôi gặp rắc rối.Symfony2 - Sử dụng trình tạo biểu mẫu mà không có bất kỳ thực thể nào được đính kèm

Điều tôi đang cố gắng làm là tạo biểu mẫu không được đính kèm với bất kỳ thực thể cụ thể nào. Tất cả các hướng dẫn và tài liệu tôi đã đọc trên trang Symfony đều hoạt động giống như nó được gắn vào một thực thể theo mặc định. Tôi tự hỏi nếu tôi chỉ nên đính kèm nó vào bất kỳ thực thể nào và chỉ cần đặt từng trường văn bản thành ánh xạ = false, nếu đây là trường hợp tôi chỉ nên tự viết mã biểu mẫu hoặc nếu có cách nào đó để thực hiện việc này trong trình tạo biểu mẫu .

Trả lời

77

Không sử dụng formType và bạn không cần đính kèm thực thể để sử dụng Trình tạo biểu mẫu. Chỉ cần sử dụng một mảng thay thế. Bạn có thể bỏ qua phần nhỏ này trong tài liệu Symfony: http://symfony.com/doc/current/form/without_class.html

<?php 
// inside your controller ... 
$data = array(); 

$form = $this->createFormBuilder($data) 
    ->add('query', 'text') 
    ->add('category', 'choice', 
     array('choices' => array(
      'judges' => 'Judges', 
      'interpreters' => 'Interpreters', 
      'attorneys' => 'Attorneys', 
     ))) 
    ->getForm(); 

if ($request->isMethod('POST')) { 
    $form->handleRequest($request); 

    // $data is a simply array with your form fields 
    // like "query" and "category" as defined above. 
    $data = $form->getData(); 
} 
+0

Tôi nghĩ rằng tôi đã bỏ sót đó. Hoàn hảo! Cảm ơn! –

+22

Để biết thông tin: '$ form-> bind ($ request)' hiện không được chấp nhận **, bạn nên sử dụng '$ form-> handleRequest ($ request)' ngay bây giờ. –

+2

Lưu ý rằng đối với Symfony 3, các kiểu trường phải là tên lớp chứ không phải là bí danh. Vì vậy, '-> add ('query', 'text')' trở thành '-> add ('query', TextType :: class)' và bạn phải nhớ 'sử dụng Symfony \ Component \ Form \ Extension \ Core \ Type \ TextType' – dnagirl

7

Bạn cũng có thể sử dụng createNamedBuilder phương pháp để tạo hình thức

$form = $this->get('form.factory')->createNamedBuilder('form', 'form') 
      ->setMethod('POST') 
      ->setAction($this->generateUrl('upload')) 
      ->add('attachment', 'file') 
      ->add('save', 'submit', ['label' => 'Upload']) 
      ->getForm(); 
Các vấn đề liên quan