Следуя официальным руководствам по настройке PHPCR для использования в качестве диспетчера узлов для CMF Symfony, рекомендуется получить все классы узлов аналогичного типа следующим образом:
$dm = $this->get('doctrine_phpcr')->getManager();
$posts = $dm->getRepository('AcmeBasicCmsBundle:Post')->findAll();
Это дает мне объект ArrayCollection, который я затем могу передать в шаблон веточки и выполнить итерацию, чтобы получить значения, такие как post.title и post.content соответственно.
Однако я хочу иметь возможность сериализации этого объекта для передачи через API. Очевидно, что этот возвращенный объект содержит много посторонней информации, относящейся к диспетчеру узлов и связанным маршрутам и т. Д., И его сериализация дает массивные громоздкие массивы, из которых кажется невозможным извлечь фактические данные класса.
Официальная документация (http://doctrine-orm.readthedocs.org/projects/doctrine-phpcr-odm/en/latest/reference/working-with-objects.html) Работа с объектами показывает, как извлекать, изменять и сохранять их в базе данных, что позволяет вам вызывать функции получения / установки в вашем классе. Я мог бы использовать эти методы для создания новых объектов из этой коллекции, но вытащить массив объектов из базы данных только для того, чтобы пройти через них и воссоздать из методов перед их сериализацией, кажется нелепым.
$dm = $this->get('doctrine_phpcr')->getManager();
$posts = $dm->getRepository('FrontendCmsBundle:Post')->findAll();
$apiPosts = array();
foreach ($posts as $post) {
$apiPosts[] = array (
'title' => $post->getTitle(),
'content' => $post->getContent(),
);
}
return $api->serialize($apiPosts, 'json');
Я прошел официальную ссылку на этот объект и попытался использовать все упомянутые функции, и ни одна из них не кажется подходящей — http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html.
Может ли кто-нибудь помочь мне получить массив данных только моего класса из phpcr?
заранее спасибо
Задача ещё не решена.
Других решений пока нет …