2013-11-01 15 views
11

Tôi muốn nhúng một bộ sưu tập các biểu mẫu không phải thực thể được nạp tiền, đây là mã, đầu tiên là phương thức buildForm của biểu mẫu gốc.Làm thế nào để nhúng một bộ sưu tập nạp tiền của các hình thức phi thực thể trong symfony2

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder->add("example1")->add("example2"); 
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { 
     /*some logic to do before adding the collection of forms*/ 
     $form->add('aclAccess', 'collection', array(
      'type' => new ChildFormType(), 
      'allow_add' => true, 
      'mapped' => false, 
      'data' => /* I dont know how to precharge a collection of non-entity forms*/ 
     )); 
    }); 
} 

nay là hình thức con

public function buildForm (FormBuilderInterface $builder, array $options) { 
    $builder->add("test1", "text", array("read_only" => true, "data" => "test")); 
    $builder->->add("test2", "choice", array(
     'choices' => array('opt1' => 'Opt1', 'opt2' => 'Opt2'), 
     'multiple' => true, 
     'expanded' => true 
    )); 
} 

nên về cơ bản tôi muốn quản lý các lựa chọn con trong lĩnh vực test2 như các hình thức tách ra, mỗi nhóm lựa chọn sẽ phụ thuộc vào giá trị của trường test1, tôi biết điều này có thể được thực hiện bằng cách mã hóa everythin trong cành mà không có các lớp biểu mẫu nhưng tôi nghĩ rằng có các lớp biểu mẫu thực hành tốt nhất để chạy thử nghiệm phpunit, để bảo trì, v.v ...

Trả lời

13

Mỗi tài liệu trên Using a Form Without a Class, dữ liệu bị ràng buộc chỉ là một mảng.

Nếu bạn không làm một trong hai trong số này, thì hình thức sẽ trả lại dữ liệu như một mảng. Trong ví dụ này, vì $defaultData không phải là đối tượng (và không có tùy chọn data_class được đặt), $form->getData() cuối cùng là trả về một mảng.

Và để làm sáng tỏ bất kỳ quan niệm sai lầm bạn có thể có về hình thức dữ liệu - những đối tượng cơ bản/lớp của một loại hình thức không phải là một thực thể - bạn có thể sử dụng bất kỳ lớp học với đặc tính công cộng hoặc getters/setters bản đồ đó cho các trường biểu mẫu. Đối với vấn đề đó, các lớp Entity không có gì đặc biệt - chúng chỉ có một loạt các thông tin ánh xạ cho ORM biết cách tồn tại chúng.

Nhưng, trở lại câu hỏi ban đầu của bạn, tôi không biết những gì ChildFormType của bạn trông như thế nào, nhưng chúng ta hãy giả định nó có hai lĩnh vực, sequencetitle

$form->add('aclAccess', 'collection', array(
     'type' => new ChildFormType(), 
     'allow_add' => true, 
     'mapped' => false, 
     'data' => array(
      array('sequence' => 1, 'title' => 'Foo') 
      , array('sequence' => 2, 'title' => 'Bar') 
     ) 
    )); 

Đó nên làm các trick

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