У меня есть решение ( собственный контроллер), но мне нужно создать новый контроллер для каждого объекта. Можно ли создать один контроллер и повторно использовать его?
Мой план был:
- Создать интерфейс, чтобы статус Требуется свойство
Код: Выделить всё
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 — это конкретный класс (
Код: Выделить всё
Channel
Я также пробовал передать аргумент без объявления типа в __invoke:
Код: Выделить всё
public function __invoke($entity)
Подробнее здесь: https://stackoverflow.com/questions/786 ... piplatform