Symfony 序列化程序问题 - NotNormalizableValueException
Symfony Serializer issue - NotNormalizableValueException
我在 Symfony 4.1 中使用带有 FOSRestBundle 的序列化程序时遇到问题
我收到以下错误消息:
Could not normalize object of type App\Entity\Youp, no supporting normalizer found.
Symfony\Component\Serializer\Exception\NotNormalizableValueException
我不明白为什么我会遇到这个问题,Symfony 的序列化程序应该有一个序列化程序对象,否则我会遗漏一些东西吗?
查看下面我的控制器和我的实体:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\YoupRepository")
*/
class Youp
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
}
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\View\View;
use FOS\RestBundle\Controller\Annotations as Rest;
use App\Entity\Youp;
class BidonController extends FOSRestController {
/**
* @Rest\View()
* @Rest\Get("/youps")
*/
public function getPharmacies() {
$youps = $this->getDoctrine()->getRepository(Youp::class)->findAll();
return $youps;
}
}
您的对象的属性是 private
,因此序列化程序不知道如何规范化或从您的对象获取任何数据。您可以将属性设置为 public
或启用 ObjectNormalizer
(它使用 PropertyAccess 组件访问 private/protected 属性)and/or GetSetMethodNormalizer
(读取class 的内容通过调用 "getters") 在您的配置中使用以下服务定义:
services:
# [..]
Symfony\Component\Serializer\Normalizer\ObjectNormalizer:
class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
public: false
tags:
- { name: 'serializer.normalizer' }
Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
public: false
tags:
- { name: 'serializer.normalizer' }
之后清除缓存。有关已包含在序列化程序组件中的规范化程序的更多信息,请参见 documentation
我在 Symfony 4.1 中使用带有 FOSRestBundle 的序列化程序时遇到问题
我收到以下错误消息:
Could not normalize object of type App\Entity\Youp, no supporting normalizer found. Symfony\Component\Serializer\Exception\NotNormalizableValueException
我不明白为什么我会遇到这个问题,Symfony 的序列化程序应该有一个序列化程序对象,否则我会遗漏一些东西吗?
查看下面我的控制器和我的实体:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\YoupRepository")
*/
class Youp
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
}
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\View\View;
use FOS\RestBundle\Controller\Annotations as Rest;
use App\Entity\Youp;
class BidonController extends FOSRestController {
/**
* @Rest\View()
* @Rest\Get("/youps")
*/
public function getPharmacies() {
$youps = $this->getDoctrine()->getRepository(Youp::class)->findAll();
return $youps;
}
}
您的对象的属性是 private
,因此序列化程序不知道如何规范化或从您的对象获取任何数据。您可以将属性设置为 public
或启用 ObjectNormalizer
(它使用 PropertyAccess 组件访问 private/protected 属性)and/or GetSetMethodNormalizer
(读取class 的内容通过调用 "getters") 在您的配置中使用以下服务定义:
services:
# [..]
Symfony\Component\Serializer\Normalizer\ObjectNormalizer:
class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
public: false
tags:
- { name: 'serializer.normalizer' }
Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
public: false
tags:
- { name: 'serializer.normalizer' }
之后清除缓存。有关已包含在序列化程序组件中的规范化程序的更多信息,请参见 documentation