Symfony 3.4路由失效问题求助
我来帮你排查下这个404的问题,毕竟刚用Symfony 3.4的时候,很容易忽略这些细节:
控制器方法缺失
Action后缀:Symfony 3.4要求所有控制器动作方法必须以Action结尾。比如你重命名后如果写成了newIndex()而不是newIndexAction(),框架根本不会把这个方法识别为可访问的路由动作,直接返回404。先检查下你的方法名,确保后缀没丢。路由注解的命名空间未导入:默认控制器里会有
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;这句,如果复制代码时不小心删掉了这个use语句,你写的@Route注解就会被当成无效注释,路由根本不会被注册。打开你的控制器文件,顶部看看有没有这个声明。路由路径语法错误:比如你把路由写成了
@Route("new-page")而不是@Route("/new-page")(少了开头的斜杠),在没有类级路由前缀的情况下,这个路径会被解析成相对路径,导致实际访问的URL不匹配。或者路径里有拼写错误,和你输入的URL不一致。缓存未清除:Symfony 3.4在dev环境下虽然会自动缓存路由,但有时候修改注解后缓存没及时更新。手动跑一下命令清缓存:
php bin/console cache:clear --env=dev清完再试试访问,很多时候这个操作能解决莫名其妙的404。
routing.yml配置路径错误:你说已经配置了
type: annotation,但还要检查resource路径是否正确指向控制器目录。默认的正确配置应该是:app: resource: '@AppBundle/Controller/' type: annotation如果resource路径写错了(比如写成了
@App/Controller/,但3.4默认是AppBundle结构),框架找不到控制器文件,自然加载不到路由。控制器类命名空间或类名不匹配:默认控制器的命名空间是
namespace AppBundle\Controller;,如果你复制后不小心改了这个命名空间,或者类名和文件名不匹配(比如文件名是NewController.php,但类名是MyNewController),路由加载器找不到对应的控制器类,也会导致404。
内容的提问来源于stack exchange,提问作者szatti1489

