的Symfony2 - JMS串行 - 排除实体如果getDeleted()不为空

问题描述:

我有嵌套一对多的关系。一个表单有疑问组,其问题组有可能的答案。的Symfony2 - JMS串行 - 排除实体如果getDeleted()不为空

我需要实现的是,忽略被删除(实际上使用$删除PARAM)

没有排斥或只是不包括物业(带式)序列化的部分或团体或问题或可能的答案工作正常。

但是@JMS \排除(如果= “表达..”)上的类(未属性)被忽略。

use JMS\Serializer\Annotation as JMS; 

/** 
* @ORM\Entity 
* @ORM\Table(name="entity_question_section") 
* @JMS\Exclude(if="object.getDeleted() !== null") 
*/ 
class QuestionSection 
{ 
....... 
} 

的排除注释允许在类上使用 “@Target({” 财产 “ ”CLASS“, ”方法“, ”注解“})”,但它不工作。

不要紧,我用什么样的表情,它会排除QuestionSection实体内部的所有领域,并返回空对象为每个QuestionSection。

我如何序列化

$serializer = $this->get('jms_serializer'); 
$serialized = $serializer->serialize($form, "json"); 
$response = new JsonResponse(); 
$response->setContent($serialized); 

如果我需要做嵌套循环构建JSON响应它很可能是非常糟糕的解决方案做到这一点。

我已经使用了几个小时来完成这项工作,我也试过JLM \ SerializerExpressionBundle \ JLMSerializerExpressionBundle(),但它只支持在属性上定义并且只排除属性。

我也试着表达使用服务(如果=“服务(‘通用’)。请将isDeleted(对象)”)

谁能给我正确的方向来解决这个问题?

谢谢

+0

你应该试试这个表达式:'@JMS \排除(IF = “this.getDeleted()== NULL!”)' –

+0

不,不行。另外,如果我做,如果=“假”,或者如果=“真”的结果是一样的。它排除了所有领域,无所谓条件。我也尝试过使用服务,但服务没有被调用。但是当我在propery上使用服务时,服务被调用并正常工作。所以通常看起来,它并没有真正支持@exclude与条件上 –

+2

类为什么不直接使用softdeleteable扩展? http://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html – Rufinus

感谢@Rufinus我已经使用http://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html这解决了我的问题。现在,“删除”实体从任何查询中排除,因此串行器仅返回所需的数据。