如何在Symfony 4.2中使用JMSSerializer

时间:2019-04-16 11:32:10

标签: symfony jmsserializerbundle jsonresponse symfony-4.2

我正在使用symfony 4.2构建一个Api,并希望在使用

安装后使用jms-serializer将我的数据序列化为Json格式。
  

撰写者需要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.

3 个答案:

答案 0 :(得分:0)

正如我在评论中所说,您可以使用Symfony的默认序列化器,并使用它由构造函数注入。

<data
     android:host="myapp.com"
     android:pathPattern="/.*/.*/quiz.html"
     android:scheme="https" />

答案 1 :(得分:0)

假设您有一个名为Foo.php的实体,该实体具有idnamedescription

您只想返回id,而在另一种情况下使用name之类的特定API时,foo/summary/也需要返回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;

}

答案 2 :(得分:0)

最后,我使用Symfony序列化程序找到了答案 非常简单:

  • 首先:使用命令istall symfony serialzer:
  

作曲家需要symfony / serializer

  • second:使用serializerInterface:

.....//

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"]';
        }

    }
    
    //......
    

使用它,我发现依赖项或DateTime或其他问题没有任何问题;)