От 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);
Кроме того, в качестве альтернативы вы можете определить 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
что тебе нужно
Других решений пока нет …