使用注释时如何更改 Zend Form 中集合字段集的计数?
How can I change count of a Collection Fieldset in Zend Form when using Annotations?
来自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);
但它不起作用,因为我猜测在我使用它时,表单已经由注释引擎构建 ($annotationBuilder->createForm(MyEntity::class);
有没有办法重建表格?
我试过了$form->prepare()
但它实际上只是删除了我的集合元素。
我也试过 $form->init()
但它似乎什么也没做。
我正在重写不使用注释的表单,但这不是我想要完成的,因为我通过以编程方式重写它实际上失去了我的实体。
使用Collection::setCount()
方法。
$form->get("element_name")->setCount($numericValue);
另外,您也可以通过编程方式定义字段集。将 @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
。
来自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);
但它不起作用,因为我猜测在我使用它时,表单已经由注释引擎构建 ($annotationBuilder->createForm(MyEntity::class);
有没有办法重建表格?
我试过了$form->prepare()
但它实际上只是删除了我的集合元素。
我也试过 $form->init()
但它似乎什么也没做。
我正在重写不使用注释的表单,但这不是我想要完成的,因为我通过以编程方式重写它实际上失去了我的实体。
使用Collection::setCount()
方法。
$form->get("element_name")->setCount($numericValue);
另外,您也可以通过编程方式定义字段集。将 @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
。