Имеется 2 сервиса (
TableGateway) и фабрики к ним:
Day и
DaySet.
Day:
- id
- date
- dayset
Day связан с
DaySet по полю
dayset.
Оба
TableGateway собираются фабрикой (
DayTableFactory и
DaySetTableFactory).
Так как
Day относится к
DaySet - в фабрике
DayTableFactory через сервис-менеджер получаю экземпляр
DaySetTable:
DayTableFactorypublic function __invoke(ServiceLocatorInterface $serviceLocator) {
// ...
$daySetTable = $serviceLocator->get(DaySetTable::class);
return DayTable(..., $daySetTable);
}
В
DayTable имеется метод, который "мэпает" объект
Day, заполняя поле dayset объектом
DaySet:
DayTable::populate($item)$daySetId = $item->getDayset()
/** @var DaySet $daySetObject */
$daySetObject = $this->daySetTable->get($daySetId);
$item->setDayset($daySetObject);
Необходимо подобное реализовать в
DaySetTable, дабы этот тэйбл-гейт сервис мог мэпать свои объекты (
DaySet) и наполнять, например, свойство
DaySet::days (
@var Day[]|array $days).
Если в фабрике
DaySetTable тянуть из сервис-менеджера (
ServiceLocator) инстанс
DayTable - Circular Dependency error, оно и понятно.
Передавать ServiceLocator (используя тот же ServiceLocatorAwareTrait) в сервис DaySetTable - не самый разумный шаг, учитывая, что данный подход уже deprecated в ZF3.
Вопрос - как разрешить цикличную зависимость (
DaySetTable <->
DayTable) не сообщая сервису (
DaySet) о сервис-контейнере?