$generator->generate('post_show', ['id' => $post->getId()])
public function getLink()
{
return sprintf('/blog/%d', $this->id);
}
Хочу отметить, что Voters довольно ограниченные в реализации — они ничего не знают о пользователях или другим сущностях, которые будут иметь доступ.
public function vote(TokenInterface $token, $subject, array $attributes);
$classMetadataFactory = new CacheClassMetadataFactory(
new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())),
new ApcuAdapter('SymfonyMetadata')
);
$propertyAccessor = PropertyAccess::createPropertyAccessorBuilder()
->setCacheItemPool(new ApcuAdapter('SymfonyPropertyAccessor'))
->getPropertyAccessor();
Запустил у себя все на реальных примерах и обрабатывает по 8 секунд.
В реальной жизни вложенность классов на много больше + данных тоже очень много.
ObjectNormalizer
class PhoneNormalizer implements NormalizerInterface, DenormalizerInterface
{
/**
* @inheritDoc
*/
public function denormalize($data, $type, $format = null, array $context = [])
{
$phone = new Phone();
$phone->id = $data['id'];
$phone->type = $data['type'];
$phone->number = $data['number'];
return $phone;
}
/**
* @inheritDoc
*/
public function supportsDenormalization($data, $type, $format = null)
{
return $type === Phone::class;
}
/**
* @inheritDoc
*/
public function normalize($object, $format = null, array $context = [])
{
return [
'id' => $object->id,
'type' => $object->type,
'number' => $object->number,
];
}
/**
* @inheritDoc
*/
public function supportsNormalization($data, $format = null)
{
return $data instanceof Phone;
}
}