Как изменить количество наборов полей коллекции в Zend Form при использовании аннотаций?

От 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() но, похоже, ничего не делает.

Я нахожусь в процессе переписывания формы, НЕ используя аннотации, но это не то, чего я пытаюсь достичь, так как я фактически теряю свою сущность, переписывая ее программным способом.

1

Решение

использование 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 что тебе нужно

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]