>

symfony 4.2로 API를 빌드하고 있으며 jms-serializer를 사용하여 데이터를 Json 형식으로 직렬화하려는 경우

composer require jms/serializer-bundle

그리고 내가 이런 식으로 사용하려고 할 때 :

``` demands = $demandRepo->findAll();
    return $this->container->get('serializer')->serialize($demands,'json');```

이 오류를 알려줍니다 :

Service "serializer" not found, the container inside "App\Controller\DemandController" is a smaller service locator that only knows about the "doctrine", "http_kernel", "parameter_bag", "request_stack", "router" and "session" services. Try using dependency injection instead.

  • 답변 # 1

    내 의견에서 말했듯이 Symfony의 기본 직렬 변환기를 사용하고 생성자에 의해 주입 할 수 있습니다.

    //...
    use Symfony\Component\Serializer\SerializerInterface;
    //...
    class whatever 
    {
        private $serializer;
        public function __constructor(SerializerInterface $serialzer)
        {
            $this->serializer = $serializer;
        }
        public function exampleFunction()
        {
            //...
            $data = $this->serializer->serialize($demands, "json");
            //...
        }
    }
    
    

  • 답변 # 2

    Foo.php 라는 법인이 있다고 가정 해 봅시다.  그 id 있다 name  그리고 description

    id 만 반환하고 싶습니다 및 name   foo/summary/ 와 같은 특정 API를 사용할 때  다른 상황에서 description 를 반환해야합니다  뿐만 아니라 foo/details

    시리얼 라이저가 정말 도움이됩니다.

    use JMS\Serializer\Annotation as Serializer;
    /*
    * @Serializer\ExclusionPolicy("all")
    */
    class Foo {
        /**
        * @Serializer\Groups({"summary", "details"})
        * @Serializer\Expose()
        */
        private $id;
        /**
        * @Serializer\Groups({"summary"})
        * @Serializer\Expose()
        */
        private $title;
        /**
        * @Serializer\Groups({"details"})
        * @Serializer\Expose()
        */
        private $description;
    }
    
    
    

    데이터를 얻기 위해 시리얼 라이저를 사용합시다

    class FooController {
        public function summary(Foo $foo, SerializerInterface $serialzer)
        {
            $context = SerializationContext::create()->setGroups('summary');
            $data = $serialzer->serialize($foo, json, $context);
            return new JsonResponse($data);
        }
        public function details(Foo $foo, SerializerInterface $serialzer)
        {
            $context = SerializationContext::create()->setGroups('details');
            $data = $serialzer->serialize($foo, json, $context);
            return new JsonResponse($data);
        }
    }
    
    
    

  • 답변 # 3

    마침내 Symfony 시리얼 라이저를 사용하여 답을 찾았습니다 매우 쉽습니다 :

    first : 다음 명령을 사용하여 istall symfony serialzer :

    와이즈 비즈

    두 번째 : serializerInterface 사용 :

    composer require symfony/serializer

    그리고 그것으로, 의존성이나 DateTime 또는 다른 문제와 관련된 문제를 찾지 못했습니다.)

    .....// use Symfony\Component\Serializer\SerializerInterface; use Symfony\Component\HttpFoundation\JsonResponse; // ..... .... // /** * @Route("/demand", name="demand") */ public function index(SerializerInterface $serializer) { $demands = $this->getDoctrine() ->getRepository(Demand::class) ->findAll(); if($demands){ return new JsonResponse( $serializer->serialize($demands, 'json'), 200, [], true ); }else{ return '["message":"ooooops"]'; } } //......

  • 이전 JavaScript로 요소의 값이 두 번 변경되었습니다
  • 다음 python - Tensorflow를 사용하여 RUC 및 LSTM 모델에 대해 AUC를 계산하고 ROC 곡선을 생성하는 방법은 무엇입니까?