В Symfony, как показать и отправить часть типа формы

1

У меня есть тип формы, который содержит несколько полей. Одно поле - это настраиваемый тип формы, который сам содержит несколько полей. Я не могу изменить дочерний тип, потому что он используется в другом месте.

Я только хочу показать поля, которые в настоящее время не пустые, но я не нашел способ сделать это. Я попытался спрятать их на шаблоне ветки - как в, а не в том, чтобы сделать их, если значение не пустое, - но затем они передаются как пустые, поэтому ранее установленные значения теперь не заданы.

Как я могу эффективно использовать часть типа формы?

Редактирование для уточнения:

Скажем, у меня есть класс OrderType с поля orderNumber и identifiers. Идентификаторы являются ItentifiersType и содержат поля invoiceNumber, name, purchaseDate и serialNumber.

Страница, которую я пытаюсь создать, должна показывать только отсутствующие данные. Если значения для orderNumber и purchaseDate уже присутствуют в базе данных, я хочу показать только поля ввода для номера invoiceNumber и serialNumber.

$builder->add('identifiers', 'collection', [
    'type' => new IdentifierType(),
    'allow_add' => true
])->add('orderNumber', 'int');
  • 0
    Я не очень следую за тобой. Не могли бы вы добавить несколько примеров?
  • 0
    Отредактировано в примере
Показать ещё 1 комментарий
Теги:
forms

1 ответ

0

Вот как я решил свою проблему. Было довольно неудобно достигать полей внутри поля identifiers но оно работает и обрабатывает форму обработки, как и ожидалось.

    /* Removed non-empty fields from the form */
    $builder->addEventListener(
        FormEvents::POST_SET_DATA,
        function (FormEvent $event) {
            $form = $event->getForm();
            $identifiers = $form->get('identifiers');
            foreach ($identifiers->all()[0]->all() as $identifier) {
                if ($identifier->getData() != null) {
                    $identifiers->all()[0]->remove($identifier->getName());
                }
            }
    });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню