Я пытаюсь написать контроллер, который не расширяет классический Symfony AbstractController, и я хотел бы использовать ParamConverter внутри в качестве аннотации. Код контроллера следующий:
<?php
declare(strict_types=1);
namespace App\Controller\Chat;
use App\Entity\Message;
use App\Entity\User;
use App\Service\DeleteMessage;
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use function assert;
final class MessageMarkAsDeletedController
{
private DeleteMessage $deleteMessage;
private Security $security;
public function __construct(DeleteMessage $deleteMessage, Security $security)
{
$this->deleteMessage = $deleteMessage;
$this->security = $security;
}
/**
* @Route("/message/{messageId}/remove", name="chat_message_mark_as_deleted", methods={"POST"})
* @ParamConverter("message", class="App\Entity\Message", options={"id" = "messageId"})
*/
public function markAsDeleted(Message $message) : JsonResponse
{
$user = $this->security->getUser();
assert($user instanceof User);
if (! ($message->getFromUser() === $user->getId())) {
return new JsonResponse(['error' => 'You don\'t have permissions to delete this message'], 404);
}
if ($message->isDeleted()) {
return new JsonResponse(['error' => 'The specified message has already been deleted'], 400);
}
$this->deleteMessage->delete($message);
return new JsonResponse(['payload' => ['success' => true]], 204);
}
}
Когда я отправляю код в gitlab, запускается конвейер, который выдает ошибку:
Symfony \ Component \ Config \ Exception \ LoaderLoadException: [Semantical Error] The annotation "@Sensio \ Bundle \ FrameworkExtraBundle \ Request \ ParamConverter" in method App \ Controller \ Chat \ MessageMarkAsDeletedController :: markAsDeleted () does not exist, or could not be auto-loaded in /app/config/routes/../../src/Controller/Chat (which is being imported from "/app/config/routes/api.yaml"). Make sure annotations are installed and enabled.
Вы хоть представляете, в чем проблема? У меня есть некоторые проблемы с пониманием того, как использовать ParamConverter, и в документации Symfony все примеры выполняются в классе контроллера, который расширяет AbstractController, и я думаю, что моя проблема с пониманием исходит оттуда.