我已经嵌套了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)")
有人能给我正确的方向来解决这个问题吗?
谢谢
答案 0 :(得分:1)
感谢@Rufinus,我使用http://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html解决了我的问题。现在"已删除"实体从任何查询中排除,因此序列化程序仅返回所需的数据。
答案 1 :(得分:0)
我在symfony 4.3中遇到了同样的问题,但是我通过要求'symfony / expression-language'来解决了这个问题
撰写者需要symfony / expression-language