如何在使用注释时更改Zend表单中Collection集合的计数?

时间:2017-03-13 22:10:38

标签: php zend-framework zend-form zend-framework3 zend-form2

来自https://docs.zendframework.com/zend-form/quick-start/#using-annotations

通过使用Zend\Form\Annotation,我可以发出这个指令:

/**
 * @ComposedObject({
 *     "target_object":"Namespace\Model\ComposedCollection",
 *         "is_collection":"true",
 *         "options":{"count":2}
 *     }); 
 */
private $property;

这样做是为了创建ComposedCollection个元素的集合,在上面的例子中,大小为2

当我需要一个包含2个元素的静态表单时,这很棒,但是当我想要动态更改它时,如何更改它?即在内部,我希望能够使用4或5组数据填充表单,数字未提前知道。

使用注释是静态的,而不是动态的。有没有办法做到这一点?

我尝试过使用

$form->get("element_name")->setOption("count", $numericValue);

但它不起作用,因为我在使用它时猜测,表单已经由Annotation引擎构建($annotationBuilder->createForm(MyEntity::class);

有没有办法重建表单?

我试过了$form->prepare()

但它实际上只是删除了我的Collection元素。

我也试过$form->init(),但似乎什么也没做。

我正在重写不使用注释的表单,但这不是我想要完成的,因为我通过以编程方式重写它实际上失去了我的实体。

1 个答案:

答案 0 :(得分:0)

使用Collection::setCount()方法。

$form->get("element_name")->setCount($numericValue);

另外,作为替代方案,您可以以编程方式定义fieldset。将@Annotation\Exclude()放在$property上,然后像这样创建一个Fieldset:

    $c = new Element\Collection('collection');
    $c->setOptions([
        'label' => 'Collection',
        'count' => 1    ,
        'should_create_template' => true,
        'allow_add' => true,
        'target_element' => [
            'type' => ComposedCollectionFieldset::class
        ]
    ]);

ComposedCollectionFieldset包含您需要的Elements