Symfony 4: Использовать аннотацию MaxDepth сериализатора jms - PullRequest
0 голосов
/ 21 февраля 2020

Я отправляю запрос на получение http со стороны angular на symfony, чтобы получить подробные сведения о команде, у меня много вложенных json объектов и круговых ссылок, я пытаюсь установить MaxDepth для связанной сущности и в качестве документации jms сказал добавить эту строку

$serializer->serialize($command, 'json', SerializationContext::create()->enableMaxDepthChecks());, чтобы создать контекст сериализатора и включить свойство maxDepth

Это моя сущность

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\MaxDepth;

/**
 * @ORM\Entity(repositoryClass="App\Repository\CommandRepository")
 */
class Command
{
    /**
     * @ORM\Id()
     * @ORM\Column(type="string", length=255)
     */
    private $id;

    /**
     * @ORM\Column(type="float")
     */
    private $price;


    /**
     * @ORM\Column(type="text")
     */
    private $adresse;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="commands")
     * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
     */
    private $user;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\CommandLine", mappedBy="command")
     */
    private $commandLines;


    /**
     * @ORM\OneToMany(targetEntity="App\Entity\GiftCheck", mappedBy="command")
     * @MaxDepth(1)
     */
    private $giftChecks;

Метод сведений о команде

/**
     * Get Commands.
     * @Rest\Get("/CommandDetails/{id}")
     * @param Request $request
     * @return View
     */

    public function CommandDetails( Request $request,$id)
    {
      $entityManager = $this->getDoctrine()->getManager();
      $command = $this->getDoctrine()->getRepository(Command::class)->find($id);
      $command-> setUser($this->getUserDetails(   $command-> getUser() ) );

      $serializer->serialize($command, 'json', SerializationContext::create()->enableMaxDepthChecks());
      return $this->handleView($this->view($command));
    }

кажется нормальным, что сервер выдает ошибку 500, потому что не знает переменную $ serializer, потому что она не инициализирована, я не нашел, как инициализировать эта переменная форма какой интерфейс! нужна помощь, пожалуйста?

по ссылке ссылка

1 Ответ

0 голосов
/ 21 февраля 2020

JMSSerializerBundle, что вы используете это сервис, и вы можете автоматически связать его в методе вашего контроллера напрямую:

public function CommandDetails(Request $request, SerializerInterface $serializer, $id)

Но сначала добавьте в файл service.yaml следующие строки:

services:
JMS\Serializer\SerializerInterface: '@jms_serializer'
...