Php Symfony和Converter在AbstractController外使用
我正在尝试编写一个不扩展Symfony的“经典”AbstractController的控制器,我想使用里面的ParamConverter作为注释。 控制器代码如下所示:Php Symfony和Converter在AbstractController外使用,php,symfony,doctrine-orm,annotations,Php,Symfony,Doctrine Orm,Annotations,我正在尝试编写一个不扩展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\Fra
<?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);
}
}
你知道问题出在哪里吗?我在理解如何使用ParamConverter和symfony文档时遇到一些问题,所有示例都是在扩展AbstractController的控制器类中完成的,我认为我的理解问题来自于那里如果它在本地工作,但不与您的管道一起工作(我猜是在prod环境中运行的),这可能意味着
ParamConverter
仅在dev环境中可用
请确保sensio/framework额外捆绑包
未注册为composer.json中的require dev
依赖项,而是常规require
依赖项
当然,您可以尝试重新安装捆绑包:
composer删除sensio/framework额外捆绑包&&composer需要sensio/framework额外捆绑包
如果它在本地工作,但不与您的管道(我想它是在prod环境中运行的),则可能意味着
ParamConverter
仅在dev环境中可用
请确保sensio/framework额外捆绑包
未注册为composer.json中的require dev
依赖项,而是常规require
依赖项
当然,您可以尝试重新安装捆绑包:
composer删除sensio/framework额外捆绑包&&composer需要sensio/framework额外捆绑包
而不是
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter;
(IMHO不存在)您应该使用
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
如所示,而不是
use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter;
(IMHO不存在)您应该使用
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
正如在中所建议的,不幸的是情况并非如此,但感谢您的贡献!不幸的是,情况并非如此,但感谢您的贡献!解决了问题,thx解决了问题,thx