Допустим, у вас есть объект с именем Foo.php
, который имеет id
, name
и description
И вы хотели бы вернуть только 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;
}
давайте использовать сериализатор для получения данных, зависитпо группе
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);
}
}