如何知道是否使用了 symfony jms 序列化程序处理程序?

问题描述

我有这门课:

namespace Vop\ProductBundle\Serializer;
use Vop\CoreBundle\Serializer\BaseSerializerHandler;
class ProductSerializerHandler extends BaseSerializerHandler 
{
    /**
     * {@inheritdoc}
     */
    public static function getType()
    {
        return 'vop_product_id';
    }
}

如果不使用,我需要将其删除。

基类:

namespace Vop\CoreBundle\Serializer;
use JMS\Serializer\Context;
use JMS\Serializer\GraphNavigator;
use JMS\Serializer\VisitorInterface;
use Symfony\Bridge\Doctrine\RegistryInterface;
abstract class BaseSerializerHandler implements SerializerHandlerInterface
{
    /**
     * @var string
     */
    protected $class;
    /**
     * @var RegistryInterface
     */
    protected $registry;
    /**
     * @param RegistryInterface $registry
     * @param string $class
     */
    public function __construct(RegistryInterface $registry,$class)
    {
        $this->registry = $registry;
        $this->class = $class;
    }
    /**
     * {@inheritdoc}
     */
    public static function getSubscribingMethods()
    {
        $type = static::getType();
        return array(
            array(
                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,'format' => 'json','type' => $type,'method' => 'serializeObjectToId',),array(
                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,'method' => 'deserializeObjectFromId',)
        );
    }
    /**
     * Serialize data object to id.
     *
     * @param VisitorInterface $visitor
     * @param object $data
     * @param array $type
     * @param Context $context
     *
     * @return int|null
     */
    public function serializeObjectToId(VisitorInterface $visitor,$data,array $type,Context $context)
    {
        if ($data instanceof $this->class) {
            return $visitor->visitInteger($data->getId(),$type,$context);
        }
        return;
    }
    /**
     * Deserialize object from its id.
     *
     * @param VisitorInterface $visitor
     * @param int $data
     *
     * @return null|object
     */
    public function deserializeObjectFromId(VisitorInterface $visitor,$data)
    {
        return $this->getRepository()->findOneBy(array('id' => $data));
    }
    /**
     * @return \Doctrine\Common\Persistence\ObjectRepository
     */
    private function getRepository()
    {
        return $this->registry->getRepository($this->class);
    }
}

那么如何判断项目中是否使用了ProductSerializerHandler呢?有使用 vop_product_id 的配置。我从配置中删除了 vop_product_id。所以可能是这个类不再使用了。但是如果在任何地方都找不到vop_product_id,我们真的可以说在项目中没有使用ProductSerializerHandler吗?

这里找到了可能是答案的东西,但您仍然可以确认: https://sonata-project.org/bundles/core/3-x/doc/reference/serialization.html

要调用您的处理程序,您可以使用 JMS Serializer 使用的自定义类型,如下所示:

<property name="post" serialized-name="entity_id" type="post_type"/>

并且您的处理程序需要指定类型名称:

// src/Serializer/PostSerializerHandler.php

namespace App\Serializer;

use Sonata\CoreBundle\Serializer\BaseSerializerHandler;

class PostSerializerHandler extends BaseSerializerHandler
{
    public static function getType()
    {
        return 'post_type';
    }
}

因此,根据奏鸣曲文档,如果我们想使用处理程序,我们必须使用 getType() 函数中的字符串。就我而言,如果项目中从未使用过来自 getType 的字符串,则不会使用处理程序。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...