可有人试图解释我如何与Symfony的串行序列化将多个类的数据时,使用多个正规化?如何在Symfony串行器中使用(chain?)多个规范器?
比方说,我有以下类:
class User
{
private $name;
private $books;
public function __construct()
{
$this->books = new ArrayCollection();
}
// getters and setters
}
class Book
{
private $title;
public function getTitle()
{
return $this->title;
}
public function setTitle($title)
{
$this->title = $title;
}
}
我想序列谁拥有多本书籍的用户。
$first = new Book();
$first->setTitle('First book');
$second = new Book();
$second->setTitle('Second book');
$user = new User();
$user->setName('Person name');
$user->addBook($first);
$user->addBook($second);
dump($this->get('serializer')->serialize($user, 'json'));
die();
比方说,我也想包括串行一本书时,哈希,所以我有以下的归一化:
class BookNormalizer implements NormalizerInterface
{
public function normalize($object, $format = null, array $context = array())
{
return [
'title' => $object->getTitle(),
'hash' => md5($object->getTitle())
];
}
public function supportsNormalization($data, $format = null)
{
return $data instanceof Book;
}
}
而且我得到预期的结果: {"name":"Person name","books":[{"title":"First book","hash":"a9c04245e768bc5bedd57ebd62a6309e"},{"title":"Second book","hash":"c431a001cb16a82a937579a50ea12e51"}]}
问题是当我还添加了一个正规化的用户等级:
class UserNormalizer implements NormalizerInterface
{
public function normalize($object, $format = null, array $context = array())
{
return [
'name' => $object->getName(),
'books' => $object->getBooks()
];
}
public function supportsNormalization($data, $format = null)
{
return $data instanceof User;
}
}
现在
,本本没有使用之前给出的归一化归,我也得到了以下内容: {"name":"Person name","books":[{},{}]}
我试图找到一种方法(文件和其它物品)总是要求给定类型的正规化(例如。当类型为Book时,即使数据嵌套并在另一个规范化器中使用,也始终调用规范器)但无法成功。
我想我误解了一些关于正规化,但不知道是什么。有人可以解释是我想要什么和如何做到这一点?