自定义控制器api平台问题



我的控制器不能在GET方法上工作,但它在PUT上工作。我不知道为什么。如果有人有答案。我知道在v2.6中有操作项和集合项之间的区别,但在v3中只有操作。我想这一定是一个语法问题,但我不知道。我问你这个问题是因为我已经找了三天的解决办法,我开始头疼了。它返回给我一个404错误。没有找到控制器的路径。

我的实体
    namespace AppEntity;
use ApiPlatformDoctrineOrmFilterSearchFilter;
use ApiPlatformMetadataApiFilter;
use ApiPlatformMetadataApiProperty;
use ApiPlatformMetadataDelete;
use ApiPlatformMetadataGet;
use ApiPlatformMetadataPatch;
use ApiPlatformMetadataPost;
use ApiPlatformMetadataPut;
use AppControllerCommentaireCountController;
use AppControllerCommentairePublishController;
use AppRepositoryCommentaireRepository;
use DoctrineDBALTypesTypes;
use DoctrineORMMapping as ORM;
use ApiPlatformMetadataApiResource;
use SymfonyComponentSerializerAnnotationGroups;
use SymfonyComponentValidatorConstraints as Assert;

#[ORMEntity(repositoryClass: CommentaireRepository::class)]
#[ApiResource(
    operations: [
        new Post(
            openapiContext: [
                'summary' => 'poste ton commentaire'
            ],
            validationContext: ['groups' => ['create:commentaire']]
        ),
        new Get(
            normalizationContext: ['groups'=>['read:blabla']]
        ),
        new Put(
            openapiContext: [
                'summary' => 'Remplace un champ de commentaire'
            ],
            denormalizationContext: ['groups'=>['write:commentaire']],
            validationContext: ['groups' => ['create:commentaire']] 
        ),
        new Delete(),
        new Patch(),
    ],
)]
#[Put(
    uriTemplate: '/commentaires/{id}/publish',
    controller: CommentairePublishController::class,
    openapiContext: [
        'summary' => 'Mettre en ligne un commentaire',
        'description' => 'Mettre en ligne le commentaire'
    ],
    normalizationContext: ['groups'=>['read:commentaire']],
    denormalizationContext: ['groups'=>['publish:commentaire']],
    name: 'Publish'
)]
#[Get(
    uriTemplate: '/commentaires/count',
    controller: CommentaireCountController::class,
    name: 'Count'
)]
#[ApiFilter(SearchFilter::class, properties: ['id' => 'exact', 'proprietaire.name' => 'iexact'])]
class Commentaire
    {
我countcontroller

    namespace AppController;
use AppEntityCommentaire;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpKernelAttributeAsController;
use SymfonyComponentRoutingAnnotationRoute;
#[AsController]
class CommentaireCountController
{
    public function __invoke(): int
    {
        return 10;
    }
    }

和我的工作publishcontroller

    namespace AppController;
use AppEntityCommentaire;
use SymfonyComponentHttpKernelAttributeAsController;
#[AsController]
class CommentairePublishController
{
    public function __invoke(Commentaire $data): Commentaire{
    $data->setOnline(true);
    return $data;
}
    }

ApiPlatform响应:{"@context"/api/环境/Error"@type"九头蛇:Error"hydra:title"; "hydra:description"; "未找到","trace"({"namespace"","short_class"","class"","type"","function"","file"C: 神用户桌面 api2 Api供应商接口平台 src Symfony EventListener ReadListener.php"核心,"line" 94,"args" []},

谢谢!

我也有同样的问题。原因是端点名称保存在缓存中的某个地方,但是cache:clear没有帮助。我用不同的名称创建了相同的端点,这个解决方案解决了问题。我知道这不是一个令人满意的解决方案,但我很想知道如果其他人遇到这个问题该如何解决。

最新更新