Увлажнение нескольких объектов из наборов полей ZF2

У меня проблема с увлажнением объектов в ZF2.

У меня есть форма для сохранения информации, связанной с организацией, или информации о человеке в базе данных. Пользователь делает выбор: сохранить либо организацию, либо человека. Просто 1 форма для всех вводимых HTML.

В ZF2 я создал 2 набора полей. В каждом классе fieldset я использую setHydrator(new ClassMethods(false)) а также setObject(new <objectForHydration>), 2 набора полей включены в форму со следующим кодом:

    $this->add([
        'type' => 'Parties\Form\Fieldsets\RegisterOrganizationFieldset',
        'options' => [
            'use_as_base_fieldset' => true,
        ],
    ]);

    $this->add([
        'type' => 'Parties\Form\Fieldsets\RegisterPersonFieldset',
        'options' => [
            'use_as_base_fieldset' => true,
        ],
    ]);

я хочу RegisterOrganizationFieldset увлажнять OrganizationObject, а также RegisterPersonFieldset увлажнять PersonObject,

Я думал о том, чтобы увлажнять оба объекта одновременно, потому что это не вводит условия в класс формы. Проблема в том, что гидратация происходит только с 1 объектом, в зависимости от того, какое поле имеет use_as_base_fieldset = true, Если оба поля имеют use_as_base_fieldset = trueпозже fieldset в коде (RegisterPersonFieldset) гидратирует только соответствующий объект.

Не могли бы вы рассказать, как увлажнять оба объекта? Может быть, как лучше увлажнять объекты?

РЕДАКТИРОВАТЬ:

Как указал @jcropp, я использую Персона и Организацию в качестве Сторон, которые являются независимыми субъектами, разделяющими только Id-свойство.

1 ответ

Решение

Один из способов увлажнения двух объектов одновременно - сделать их одинаковыми.

Из вашего вопроса не ясно, является ли 1) лицо, которое регистрируется, членом регистрирующей организации, или 2) "стороны" регистрируются, и партия может быть либо организацией, либо человеком. Вот несколько ответов для обоих случаев:

Если люди являются членами организаций в вашей структуре данных, то метод одновременного объединения этих данных состоит в том, чтобы обрабатывать данные о людях как "коллекции" элементов данных организации. Этот метод использует отношения между наборами полей для создания единого набора данных, в котором как данные организации, так и данные о сотрудниках могут редактироваться вместе. Смотрите руководство ZF2.

Если ваше намерение состоит в том, чтобы зарегистрировать отдельные стороны, и стороной может быть либо организация, либо человек, метод гидратации одного или другого в той же форме заключается в использовании наследования таблиц. При наследовании одной таблицы у вас будет одна таблица (и один набор полей) для обоих типов сторон, и выбор между человеком или типом организации будет указывать, следует ли вводить данные в поля организации или поля персон таблицы. При наследовании нескольких таблиц вы должны создать таблицу вечеринок, связанную с организационной таблицей и таблицей персонала; и наборы полей организации и человека расширили бы набор полей участника.

Другие вопросы по тегам