簡體   English   中英

Symfony2-JMS序列化器-如果getDeleted()不為null,則排除實體

[英]Symfony2 - JMS Serializer - Exclude entity if getDeleted() is not null

我已經嵌套了一對多關系。 表單包含問題部分,其中的問題組包含問題,這些問題具有可能的答案。

我需要實現的是,忽略那些被刪除的部分或組或問題或可能的答案(實際上使用$ deleted參數)

不排除序列或僅排除屬性(帶有表達式)的序列化效果很好。

但是類(非屬性)上的@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“,” ANNOTATION“})”“上使用排除注釋,但是它不起作用。

不管我使用哪種類型的表達式,它都會排除QuestionSection實體內的所有字段,並為每個QuestionSection返回空對象。

我如何序列化

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

如果我需要通過執行嵌套循環來構建json響應來做到這一點,那可能是非常糟糕的解決方案。

我已經用了幾個小時的時間來完成這項工作,我也嘗試過JLM \\ SerializerExpressionBundle \\ JLMSerializerExpressionBundle(),但它僅支持在屬性上定義,並且僅排除屬性。

我也嘗試過使用服務的表達式(if =“ service('general')。isDeleted(object)”)

誰能給我正確的方向來解決這個問題?

謝謝

感謝@Rufinus,我使用了http://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html解決了我的問題。 現在,“已刪除”實體將從任何查詢中排除,因此序列化程序僅返回所需的數據。

我在symfony 4.3中遇到了同樣的問題,但是我通過要求'symfony / expression-language'來解決了

作曲者需要使用symfony / expression-language

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM