Symfony-ParamConverter:手动属性“已启用”和“已删除”

时间:2018-08-07 11:47:37

标签: symfony annotations symfony-3.4

我正在研究:

  • Symfony 3.4.14
  • SensionExtraFrameworkBundle 5.2.0

在使用此方法将广告系列放入控制器之前,

<?php

/**
* @Route("/{slug}", name="homepage")
*/

public function indexAction($slug)
{
    ......->findOneBy([ 'slug" = $slug, 'deleted' = 0, 'enabled' = 1 ])
}

然后,我决定使用@ParamConverter注释来自动选择良好的Campaign对象。效果很好:

<?php

/**
* @Route("/{slug}", name="homepage")
* @ParamConverter("campaign", options={"mapping":{ "slug" = "slug" }})
*/

public function indexAction(Campaign $campaign)
{

}

但是,我的实体还包含2个属性deletedenabled,但我不知道如何将其包含在mapping选项中。以下是我已经尝试过的内容:

<?php

/**
* @Route("/{slug}", name="homepage")
* @ParamConverter("campaign", options={"mapping":{ "slug" = "slug", "deleted" = "0", "enabled" = "1" }})
*/

public function indexAction(Campaign $campaign)
{

}

行情/“ 0”值无引号=相同的结果。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以创建一个自定义存储库功能,该功能可以通过slug和其他2个字段来检索Entity。

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;

/**
* @Route("/{slug}", name="homepage")
* @Entity("campaign", expr="repository.findActive(slug)")
*/
public function indexAction(Campaign $campaign)
{}

然后,在CampaignRepository中创建一个findActive函数。您将能够过滤已启用和已删除的字段。

不要忘记在Entity Annotation中设置repositoryClass。

如果存在实现此目标的另一种方法,我很想知道