Сериализующий массив / объект вложенных объектов, исходящих из сущности в Symfony

#php #doctrine-orm #symfony4

#php #doctrine-orm #symfony4

Вопрос:

Мне нужно вернуть Json из определенного объекта таким образом: введите описание изображения здесь

К настоящему времени я достиг результата:

введите описание изображения здесь

Со следующим кодом:

 
namespace AppController;

use AppEntityLogStatus;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;
use SymfonyComponentSerializerSerializerInterface;

class LogController extends AbstractController
{
    /**
     * @Route("/logs/statuses", name="log_statuses", methods={"POST"})
     */
    public function index(EntityManagerInterface $entityManager): Response
    {

        $request = new Request($_POST);
        $data = $request->getContent();
        $data = json_decode($data);
        $data = (array)$data;

        $deviceId = $data['filter'];

        $logStatuses = $entityManager->getRepository(LogStatus::class)
            ->findBy(['deviceid' => $deviceId], ['createdat' => 'DESC']);

        return new JsonResponse([
                'rows' => (array)$logStatuses[0]
            ]
        );
    }
}
  

Вопрос: как следует $logStatuses кодировать, чтобы получить ожидаемый формат Json (или манипулировать в extend) без итерации по каждому объекту.

Комментарии:

1. Каков ваш результат, если вы просто return $this->json(['rows' => [$logStatuses]]); ? Возможно, вам потребуется установить symfony/serializer .

2. @msg ваше предложение верно $this-> json делает мой день! Спасибо!

3. Если вам нужен более точный контроль над ответом, я бы посоветовал взглянуть на ->json() исходный код и документы serializer . Вы также можете использовать его вместо json_decode вызова.