JMS序列化器。如何使用排除条件?

时间:2017-12-15 11:54:01

标签: php symfony jmsserializerbundle

我在我的symfony项目中使用JMS序列化程序,我有一个关于" Exlude condition"的问题。是否可以指定实体的一个属性将是所有路由(方法)的一个属性。  我的意思是这样的:

 /**
 * @var string
 *
 * @ORM\Column(name="full_name", type="text", nullable=true)
 * @JMS\Exlude(if="!someAction()")
 */
private $fullName;

如果可能,这个的正确语法是什么?感谢)

1 个答案:

答案 0 :(得分:1)

要使用@Exclude注释,您需要了解一点Symfony ExpressionLanguage的理解。

显然,注释中使用的函数(例如someAction())不属于当前对象,而是属于表达式语言实例。要注册它,请执行以下操作:

$language = new ExpressionLanguage();
$language->register('someAction', function(){}, function ($arguments, $object) {

    // your logic goes here

    return false;
});

然后将其绑定到序列化程序:

$serializer = SerializerBuilder::create()
    ->setExpressionEvaluator(new ExpressionEvaluator($language))
    ->build();

然后您应该能够使用此排除策略进行序列化:

/**
 * @var string
 *
 * @ORM\Column(name="full_name", type="text", nullable=true)
 * @JMS\Exlude(if="!someAction(object)")
 */
private $fullName;

我不确定的一件事是将空的可调用传递给register调用(对于编译器),我无法给它旋转并确认它是有效的。

希望这会有所帮助......