Php 使用自定义规范化器修改类属性
我有一个具有两个属性的实体,Php 使用自定义规范化器修改类属性,php,symfony,api-platform.com,Php,Symfony,Api Platform.com,我有一个具有两个属性的实体,name和photo。name属性是从数据库中读取的,但是我必须用一些其他信息填充photo属性 我遵循了文档中的教程,并制作了自定义规范化器: <?php namespace App\Serializer; use App\Entity\Style; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Norm
name
和photo
。name
属性是从数据库中读取的,但是我必须用一些其他信息填充photo
属性
我遵循了文档中的教程,并制作了自定义规范化器:
<?php
namespace App\Serializer;
use App\Entity\Style;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
final class StyleNormalizer implements NormalizerInterface, DenormalizerInterface
{
private $normalizer;
private $uploaderHelper;
public function __construct(NormalizerInterface $normalizer, UploaderHelper $uploaderHelper)
{
if (!$normalizer instanceof DenormalizerInterface) {
throw new \InvalidArgumentException('The normalizer must implement the DenormalizerInterface');
}
$this->normalizer = $normalizer;
$this->uploaderHelper = $uploaderHelper;
}
public function denormalize($data, $class, $format = null, array $context = [])
{
return $this->normalizer->denormalize($data, $class, $format, $context);
}
public function supportsDenormalization($data, $type, $format = null)
{
return $this->normalizer->supportsDenormalization($data, $type, $format);
}
public function normalize($object, $format = null, array $context = [])
{
if ($object instanceof Style) {
$object->setPhoto('http://api-platform.com');
}
return $this->normalizer->normalize($object, $format, $context);
}
public function supportsNormalization($data, $format = null)
{
return $this->normalizer->supportsNormalization($data, $format);
}
}
尝试将此添加到您的支持snormalization
方法中:
public function supportsNormalization($data, $format = null)
{
return
$this->normalizer->supportsNormalization($data, $format)
&& is_object($data) && $data instanceof Style::class
;
}
谢谢你的回答!它仍然不起作用。。。如果我添加一个var\u dump($data)
它只打印一个带有名称
属性内容的字符串,而照片
属性为空……它从不打印完整的样式
实体OK,我发现它只在我使用json
格式(不适用于json ld
和其他格式)时才起作用如果您想使用json ld,您必须修饰特定的api平台规范化程序:decorates:'api_platform.jsonld.normalizer.item'
或对于jsondecorates:'api_platform.jsonapi.normalizer.item'
`是的,很好!这就是我要找的!