Symfonyシリアライザを使用して複数のクラスからデータをシリアライズする際に、複数のノーマライザを使用する方法を教えてもらえますか?Symfonyシリアライザで複数のノーマライザを使用(チェーン?)する方法は?
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"}]}
を問題は、Userクラスのノーマライザを追加したときに発生します。
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の場合は常にBook Normalizerを呼び出します)、成功することはできません。
ノーマライザについて何か誤解していると思いますが、何がわからないのでしょうか。誰かに説明できるのは、私が可能にしたいこととそれをやり遂げる方法です。