Skip to content

Instantly share code, notes, and snippets.

@rakodev
Last active September 16, 2019 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rakodev/433a413a22b89afc6f4209545e250770 to your computer and use it in GitHub Desktop.
Save rakodev/433a413a22b89afc6f4209545e250770 to your computer and use it in GitHub Desktop.
<?php
namespace App\Serializer\Normalizer;
use App\Entity\User;
use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
class UserNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface
{
private $normalizer;
public function __construct(ObjectNormalizer $normalizer)
{
$this->normalizer = $normalizer;
}
public function normalize($object, $format = null, array $context = array()): array
{
/** @var User $object */
if ($this->userIsOwner($object)) {
$context['groups'][] = 'owner:read';
}
$data = $this->normalizer->normalize($object, $format, $context);
return $data;
}
public function supportsNormalization($data, $format = null): bool
{
return $data instanceof User;
}
public function hasCacheableSupportsMethod(): bool
{
return true;
}
private function userIsOwner(User $user): bool
{
return rand(0, 10) > 5;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment