Drupal 8模块路由报错:Undefined index:path及访问被拒求助
先来说第一个错误:Notice: Undefined index: path
这个提示通常意味着Drupal解析路由配置时没找到path字段,大概率是YAML格式的缩进问题——Drupal对YAML的缩进要求非常严格,必须用两个空格(绝对不能用Tab)区分层级。你贴的routing.yml结构看着没问题,但建议仔细检查path、defaults、requirements这些顶级键的缩进是否完全一致,以及defaults下的_controller、_title是不是比defaults多缩进两个空格。
另外要确认你的路由文件名是mymodule.routing.yml,且放在模块根目录下(不是子文件夹),文件名拼写、大小写必须和模块名完全匹配。
最后一定要执行缓存清除:
drush cr
或者后台进入「配置>性能」页面清除全部缓存——Drupal会缓存路由配置,修改后必须清缓存才能让新配置生效。
再解决第二个问题:Access denied(访问被拒绝)
你的路由里写的requirements: _role: anonymous,这个规则的意思是只有未登录的匿名用户才能访问这个页面。如果你现在处于登录状态,访问被拒绝是完全符合预期的行为。
如果你的需求是让所有用户(包括登录和匿名)都能访问,应该把_role改成_permission,用一个所有用户都拥有的权限,比如:
requirements: _permission: 'access content'
如果你确实只想让匿名用户访问,那退出登录后再访问/mypage就能正常打开了。
另外补充个小细节:_role即便是单个角色,也建议用引号括起来,避免YAML解析异常,比如:
requirements: _role: 'anonymous'
总结一下操作步骤:
- 检查
mymodule.routing.yml的YAML缩进,确保全用两个空格、无Tab - 确认路由文件名和存放位置正确
- 清除Drupal缓存
- 根据实际需求调整
requirements里的权限/角色规则,或切换到匿名状态访问
内容的提问来源于stack exchange,提问作者Robert-Dan

