Symfony 3.4 + FOSRestBundle报错:无法识别rest类型控制器
解决Symfony 3.4 + FOSRestBundle路由加载报错问题
你这问题我之前帮人排查过,核心就是Symfony找不到能处理rest类型路由的加载器——虽然你已经启用了FOSRestBundle,但还有几个关键配置没跟上,一步步来搞定:
1. 开启FOSRestBundle的路由加载器
打开config/config.yml,添加或完善FOSRestBundle的配置,必须开启路由资源加载器,这是解决问题的核心:
fos_rest: router: resource_loader: true # 要是你接口只返回JSON,还能加个格式监听的配置(可选但实用) format_listener: rules: - { path: ^/api, priorities: [json], fallback_format: json, prefer_extension: false }
2. 调整routes.yaml的导入写法
你现在routes.yaml里的api条目可以去掉type: rest,因为api.yaml里每个路由已经指定了rest类型,FOSRestBundle的加载器会自动处理:
# Some routes... # Api rest api: resource: "api.yaml" prefix: /api
3. 检查控制器的路由配置
如果你的MediaApi、FeedsApi这些控制器用的是FOSRestBundle的注解路由,得确保控制器里的注解格式正确,比如:
<?php namespace App\Controller\REST; use FOS\RestBundle\Controller\Annotations as Rest; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class MediaApi extends Controller { /** * @Rest\Get("/media") */ public function getMediaAction() { // 你的业务逻辑代码 } }
要是纯靠配置文件定义路由,就确认api.yaml里的控制器命名空间完全正确,别写错字符。
4. 确认依赖版本适配
Symfony 3.4需要搭配FOSRestBundle的^2.1版本,打开composer.json检查下:
"friendsofsymfony/rest-bundle": "^2.1"
版本不对的话,执行composer update friendsofsymfony/rest-bundle更新到兼容版本。
5. 最后清除缓存
这步千万别忘,尤其是生产环境:
# 开发环境 php bin/console cache:clear # 生产环境 php bin/console cache:clear --env=prod
做完这些,Symfony就能识别rest类型的路由加载器,报错应该就消失了。
内容的提问来源于stack exchange,提问作者graille
相关产品推荐
相关产品推荐

