ApiPlatform创建自定义search端点提示控制器不存在如何解决
问题原因
你在@ApiResource注解中配置controller参数时,错误地给类常量PostSearchController::class套了双引号,导致ApiPlatform读取到的是普通字符串"PostSearchController::class",而非解析后的完整类名App\Controller\PostSearchController,因此无法匹配到已经注册的控制器服务。
修复方案
修改App\Entity\Search.php里的@ApiResource配置,去掉controller参数值的双引号即可:
<?php namespace App\Entity; use ApiPlatform\Core\Annotation\ApiResource; use App\Controller\PostSearchController; use App\Dto\SearchInput; use App\Dto\SearchOutput; /** * @ApiResource( * input=SearchInput::class, * output=SearchOutput::class, * collectionOperations = { * "search" = { * "method" = "POST", * "path" = "/search", * "controller" = PostSearchController::class * } * }, * itemOperations = { * * } * ) */ final class Search { public $id; }
后续验证步骤
- 执行
php bin/console cache:clear清除Symfony注解缓存,避免旧配置残留 - 重新请求接口即可正常触发
PostSearchController的__invoke方法
如果未在当前文件顶部use导入控制器类,也可以直接写完整类名:"controller" = \App\Controller\PostSearchController::class,效果完全一致。
内容的提问来源于stack exchange,提问作者akio
相关产品推荐
相关产品推荐

