Универсальный контроллер для мягкого удаления в ApiPlatformPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Универсальный контроллер для мягкого удаления в ApiPlatform

Сообщение Anonymous »

Я использую ApiPlatform и хочу изменить поведение запроса на удаление для моих объектов. В каждой сущности у меня есть свойство status — при вызове запроса на удаление он должен установить статус в 0 вместо удаления записи из базы данных.
У меня есть решение ( собственный контроллер), но мне нужно создать новый контроллер для каждого объекта. Можно ли создать один контроллер и повторно использовать его?
Мой план был:
  • Создать интерфейс, чтобы статус Требуется свойство

Код: Выделить всё

interface SoftDeletableInterface
{
public function setStatus(int $status): static;
}
  • Реализуйте этот интерфейс для объектов, к которым необходимо применять обратимое удаление.
  • Перенесите операцию удаления в SoftDeleteController.

Код: Выделить всё

#[ApiResource(
operations: [
new Delete(
controller: ChannelSoftDeleteController::class
),
]
)]
  • Написать универсальный контроллер

Код: Выделить всё

public function __invoke(string $entityClassName, $id): Response
{
$entityClass = 'App\\Entity\\' . ucfirst($entityClassName);

if (!class_exists($entityClass) || !is_subclass_of($entityClass, SoftDeletableInterface::class))
{
return new Response(null, Response::HTTP_METHOD_NOT_ALLOWED);
}

$repository = $this->entityManager->getRepository($entityClass);
$entity = $repository->find($id);

if (!$entity)
{
return new Response(null, Response::HTTP_NOT_FOUND);
}

$entity->setStatus(0);

$this->entityManager->persist($entity);
$this->entityManager->flush();

return new Response(null, Response::HTTP_NO_CONTENT);
}
Но генерируется ошибка:

Не удалось разрешить аргумент $entityClassName «App\Controller\SoftDeleteController::__invoke» ()", возможно, вы забыли зарегистрировать контроллер как службу или пропустили пометку его с помощью "controller.service_arguments"?

Когда __invoke — это конкретный класс ( в моем случае) все работает.
Я также пробовал передать аргумент без объявления типа в __invoke:

Код: Выделить всё

public function __invoke($entity)
но выдает ту же ошибку

Подробнее здесь: https://stackoverflow.com/questions/786 ... piplatform
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Пользовательский контроллер многоразового использования ApiPlatform
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский контроллер многоразового использования ApiPlatform
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Красноречивые действия Laravel для мягкого удаления
    Anonymous » » в форуме Php
    0 Ответы
    301 Просмотры
    Последнее сообщение Anonymous
  • Красноречивые действия Laravel для мягкого удаления
    Anonymous » » в форуме Php
    0 Ответы
    247 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать универсальный класс в универсальный класс объекта?
    Anonymous » » в форуме C#
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»