Symfony - ParamConverter: ручные атрибуты "включено" и "удалено"

Я работаю на:

  • 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 аннотация для автоматического выбора хорошего объекта кампании. Работает отлично:

<?php

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

public function indexAction(Campaign $campaign)
{

}

Тем не менее, моя сущность также содержит 2 атрибута deleted а также enabled и я не знаю, как включить его в mapping вариант. Ниже то, что я уже пробовал:

<?php

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

public function indexAction(Campaign $campaign)
{

}

Кавычки / Нет кавычек для значения "0" = тот же результат. Любая идея?

1 ответ

Вы можете создать пользовательскую функцию репозитория, которая будет извлекать сущность по слагу и двум другим полям.

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;

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

Затем создайте findActive функция в CampaignRepository. Вы сможете фильтровать по включенному и удаленному полю.

Не забудьте установить класс репозитория в аннотации сущности.

Если есть другой способ достичь этой цели, мне интересно знать

Другие вопросы по тегам