Symfony 3.4启动服务器报错:找不到HomeController类服务的解决方法
我之前也碰到过Symfony 3.4里这种控制器类找不到的情况,别着急,咱们一步步排查解决:
检查文件路径与命名空间
先确认你的HomeController.php文件是不是放在src/AppBundle/Controller/目录下,注意Linux系统下文件名是大小写敏感的,比如小写的homecontroller.php会导致系统找不到类。打开文件顶部,确保命名空间是namespace AppBundle\Controller;,拼写和格式不能出错。验证类名与文件名一致
文件里的类名必须和文件名完全匹配,比如文件叫HomeController.php,类定义就得是class HomeController extends Controller,大小写、名称都要严格对应,不能出现Homecontroller或者其他变体。清除Symfony缓存
Symfony的缓存有时候会“记住”旧的类路径信息,尤其是开发环境下。执行下面的命令清空缓存:php bin/console cache:clear --env=dev如果是生产环境,把
--env=dev换成--env=prod即可。更新Composer自动加载器
打开项目根目录的composer.json,检查autoload部分是否正确配置了AppBundle的路径:"autoload": { "psr-4": { "AppBundle\\": "src/AppBundle/" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }如果修改过这个文件,或者怀疑自动加载器没识别到新文件,执行命令更新:
composer dump-autoload检查手动配置的服务(如果有)
如果你在app/config/services.yml或其他配置文件里手动注册了HomeController服务,要确保配置的类路径完全正确,比如:services: AppBundle\Controller\HomeController: class: AppBundle\Controller\HomeController # 其他相关配置...这里的
class值必须和实际的类命名空间、类名完全一致,不能有拼写错误。排查拼写错误
最后再仔细核对报错信息里的AppBundle\Controller\HomeController,和你实际的类名、命名空间对比,有没有少写字母、多写字母或者大小写错误——比如把AppBundle写成Appbundle,这种小错误很容易被忽略。
内容的提问来源于stack exchange,提问作者Remigiusz Remas

