Простой способ отформатировать ваши доменные объекты в JSON - это использовать Marshal Serializer .
Затем передайте данные в json_encode
и отправьте правильный заголовок Content-Type для ваших нужд.
Если вы используете фреймворк, такой как Symfony, вам не нужно заботиться об установке заголовков вручную. Там вы можете использовать JsonResponse .
Например, правильный тип контента для работы с Javascript будет application/javascript
.
Или, если вам нужно поддерживать несколько довольно старых браузеров, самым безопасным будет text/javascript
.
Для всех других целей, таких как мобильное приложение, используйте application/json
в качестве Content-Type.
Вот небольшой пример:
<?php
...
$userCollection = [$user1, $user2, $user3];
$data = Marshal::serializeCollectionCallable(function (User $user) {
return [
'username' => $user->getUsername(),
'email' => $user->getEmail(),
'birthday' => $user->getBirthday()->format('Y-m-d'),
'followers => count($user->getFollowers()),
];
}, $userCollection);
header('Content-Type: application/json');
echo json_encode($data);