Увлажнение нескольких объектов из наборов полей 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.
Если ваше намерение состоит в том, чтобы зарегистрировать отдельные стороны, и стороной может быть либо организация, либо человек, метод гидратации одного или другого в той же форме заключается в использовании наследования таблиц. При наследовании одной таблицы у вас будет одна таблица (и один набор полей) для обоих типов сторон, и выбор между человеком или типом организации будет указывать, следует ли вводить данные в поля организации или поля персон таблицы. При наследовании нескольких таблиц вы должны создать таблицу вечеринок, связанную с организационной таблицей и таблицей персонала; и наборы полей организации и человека расширили бы набор полей участника.