【问题标题】:JMS serializer. How to use Exclude condition?JMS 序列化程序。如何使用排除条件?
【发布时间】:2017-12-15 11:54:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: php symfony jmsserializerbundle


    【解决方案1】:

    要使用@Exclude注解,你需要对Symfony的ExpressionLanguage有一点了解。

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

    $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 调用(用于编译器),我无法对其进行旋转并确认它是否有效。

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2016-07-25
      • 2015-03-16
      • 2019-04-20
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      相关资源
      最近更新 更多