簡體   English   中英

如何在symfony2中嵌入預先收集的非實體表單

[英]How to embed a precharged collection of non-entity forms in symfony2

我想嵌入一個預先充電的非實體表單集合,這里是代碼,首先是父表單buildForm方法。

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*/
        ));
    });
}

現在的孩子形式

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
    ));
}

所以基本上我想在test2字段中管理那些子選項作為單獨的表單,每個選項組將取決於test1字段的值,我知道這可以通過在沒有表單類的twig編碼everythin來完成,但我認為有表單類它是運行phpunit測試,可維護性等的最佳實踐......

根據使用沒有類的表單的文檔,綁定數據只是一個數組。

如果您執行其中任何一項,則表單將以數組形式返回數據。 在此示例中,由於$defaultData不是對象(並且未設置data_class選項),因此$form->getData()最終返回一個數組。

並且為了澄清您可能對表單數據的任何誤解 - 表單類型的基礎對象/類不必是實體 - 您可以使用具有公共屬性的任何類或映射到表單字段的getter / setter。 就此而言,實體類本身並不特別 - 它們只有一堆映射信息告訴ORM如何持久化它們。

但是,回到你原來的問題,我不知道你的ChildFormType是什么樣的,但我們假設它有兩個字段, 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')
        )
    ));

應該可以解決問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM