我的控制器不能在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没有帮助。我用不同的名称创建了相同的端点,这个解决方案解决了问题。我知道这不是一个令人满意的解决方案,但我很想知道如果其他人遇到这个问题该如何解决。