Symfony2 - JMS Serializer - 如果getDeleted()不为null,则排除实体

时间:2017-05-02 15:40:53

标签: json symfony serialization

我已经嵌套了OneToMany关系。表单中有问题部分,其中的问题组有问题可能有答案。

我需要实现的是忽略那些被删除的部分或组或问题或可能的答案(实际上使用$ deleted param)

不排除序列化或仅排除属性(带表达式)工作正常。

但忽略了类(非属性)上的@JMS \ Exclude(if =" expression ..")。

use JMS\Serializer\Annotation as JMS;

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

允许在课堂上使用排除注释" @Target({" PROPERTY"," CLASS"," METHOD",&#34 ; ANNOTATION"})"但它不起作用。

无论我使用何种表达式,它都会排除QuestionSection实体中的所有字段,并为每个QuestionSection返回空对象。

我如何序列化

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

如果我需要通过嵌套循环来构建json响应,那么它可能是非常糟糕的解决方案。

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

我也尝试使用服务表达(如果="服务('一般')。isDeleted(object)")

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

谢谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我在symfony 4.3中遇到了同样的问题,但是我通过要求'symfony / expression-language'来解决了这个问题

  

撰写者需要symfony / expression-language