JMS 序列化程序。如何使用排除条件?
JMS serializer. How to use Exclude condition?
我在我的 symfony 项目中使用 JMS 序列化器,我有一个关于 "Exlude condition" 的问题。是否可以指定一个 属性 实体将被排除在所有路由(方法)之外。
我的意思是这样的:
/**
* @var string
*
* @ORM\Column(name="full_name", type="text", nullable=true)
* @JMS\Exlude(if="!someAction()")
*/
private $fullName;
如果可能的话,正确的语法是什么?谢谢)
要使用 @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
调用(对于编译器),我没有办法试一试并确认它是有效的。
希望这对您有所帮助...
我在我的 symfony 项目中使用 JMS 序列化器,我有一个关于 "Exlude condition" 的问题。是否可以指定一个 属性 实体将被排除在所有路由(方法)之外。 我的意思是这样的:
/**
* @var string
*
* @ORM\Column(name="full_name", type="text", nullable=true)
* @JMS\Exlude(if="!someAction()")
*/
private $fullName;
如果可能的话,正确的语法是什么?谢谢)
要使用 @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
调用(对于编译器),我没有办法试一试并确认它是有效的。
希望这对您有所帮助...