Как скрыть элемент из коллекции в зависимости от значения какого-либо поля? - PullRequest
0 голосов
/ 22 марта 2020

Я переопределяю (пользовательская операция и служба) операцию DELETE моего приложения, чтобы избежать удаления данных из БД. Я обновляю значение поля: isDeleted === true.

Вот мой контроллер:

class ConferenceDeleteAction extends BaseAction
{
    public function __invoke(EntityService $entityService, Conference $data)
    {
        $entityService->markAsDeleted($data, Conference::class);
    }

...

Мой сервис:

class EntityService extends BaseService
{
    public function markAsDeleted(ApiBaseEntity $data, string $className)
    {
        /**
         * @var ApiBaseEntity $entity
         */
        $entity = $this->em->getRepository($className)
            ->findOneBy(["id" => $data->getId()]);
        if ($entity === null || $entity->getDeleted()) {
            throw new NotFoundHttpException('Unable to find this resource.');
        }

        $entity->setDeleted(true);
        if ($this->dataPersister->supports($entity)) {
            $this->dataPersister->persist($entity);
        } else {
            throw new BadRequestHttpException('An error occurs. Please do try later.');
        }
    }

}

Как скрыть «удаленные» элементы из коллекции на глаголе GET (отфильтруйте их по результату, чтобы они не были видны)?

Вот моя операция для глагола GET, я не знаю, как с этим справиться:

class ConferenceListAction extends BaseAction
{
    public function __invoke(Request $request, $data)
    {
        return $data;
    }
}

1 Ответ

0 голосов
/ 28 марта 2020

Я что-то сделал; Я не уверен, что это лучшая практика.

Так как, когда мы делаем:

return $data;

в нашем контроллере, API Platform уже получает данные и заполняет $ data. Поэтому я решил добавить свою логику c до возвращения; как:

    public function __invoke(Request $request, $data)
    {
        $cleanDatas = [];
        /**
         * @var Conference $conf
         */
        foreach ($data as $conf) {
            if (!$conf->getDeleted()) {
                $cleanDatas[] = $conf;
            }
        }

        return $cleanDatas;
    }

Так что теперь у меня есть только не восстановленные предметы. Не стесняйтесь, дайте мне знать, если есть что-то лучше.

Спасибо.

...