Можно/Как сделать ZF2 DoctrineObject
hydrator обеспечить его выход в виде вложенного массива вместо массива с вложенными объектами сущностей?Как получить выход вложенного массива с помощью DoctrineObject Hydrator в ZF2?
Так что
Array
(
[id] => 123,
[title] => FooTitle,
[bar] => Array
(
[id] => 567,
[title] => BarTitle
)
)
вместо этого
Array
(
[id] => 123,
[title] => FooTitle,
[bar] => Bar Object
(
[id] => 567,
[title] => BarTitle
)
)
Дополнительная informaition/фон:
В приложении ZF2 я работаю, я использую Доктрина и имеют организации Foo
и Bar
. Существует OneToOne
отношения между ними - Foo
has a
Bar
:
{
"id": "123",
"title": "FooTitle",
"bar": {
"id": "567",
"title": "BarTitle"
}
}
Когда я извлечь Foo
объект и передать его в DoctrineModule\Stdlib\Hydrator#extract(...)
(в моем приложении это делается в ZF\Hal\Plugin#convertEntityToArray(...)
), я получаю массив с элементом bar
типа Bar
.
На следующем этапе (на самом деле несколько вызовов позже) этот результат передается на Zend\View\Renderer\JsonRenderer#render(...)
, а затем на Zend\Json\Json::encode(...)
, который внутренне выполняет json_encode(...)
.
Так значение foo[bar]
отфильтровывается и выход выглядит следующим образом:
{
"id": "123",
"title": "FooTitle",
"bar": {}
}
Не можете ли вы просто реализовать свои сущности «Zend \ Stdlib \ JsonSerializable», а затем 'JsonRenderer' будет использовать ваши предоставленные' jsonSerialize() 'функции? – Ankh
Спасибо за подсказку! Да, его возможно и будет работать (просто проверено). Другим решением будет расширение гидратора «DoctrineObject» и создание элементов объекта в массивах. Но на самом деле я был уверен, что речь идет только о конфигурациях «DoctrineObject», и я просто не могу найти подходящую настройку. Не поддерживает ли эта функция «DoctrineObject»? – automatix
Прошло некоторое время с тех пор, как я работал с Доктриной, но я думаю, что вы правильно поняли, что «DoctrineObject» должен уже предоставлять эту функцию, но только если вы предоставили стратегии, как подсубы должны быть гидратированы/извлечены , Если у него нет связанной стратегии, он просто вернет объект. См. [Здесь] (https://github.com/doctrine/DoctrineModule/blob/master/src/DoctrineModule/Stdlib/Hydrator/DoctrineObject.php#L171) и [здесь] (https://github.com/zendframework/ Зенд-STDLIB/блоб/ведущий/SRC/гидратор/AbstractHydrator.php # L124) – Ankh