Drupal 8缓存无法清除及Hello World模块路由失效求助
嗨,我来帮你搞定这两个Drupal的问题!
问题1:无法清除Drupal 8中的缓存
给你列几个靠谱的清缓存方法,总有一款能解决你的困扰:
- 用Drush命令快速清缓存:这是开发者最常用的方式,在项目根目录运行
drush cr(全称是drush cache:rebuild);如果Drush没全局安装,就用./vendor/bin/drush cr来执行。 - 通过后台UI清缓存:登录Drupal后台后,点击顶部工具栏的「配置」→「开发」→「性能」,然后点击「清除所有缓存」按钮;要是后台页面加载有问题,直接访问
/admin/config/development/performance跳转过去操作。 - 手动删除缓存文件:找到
drupal/web/sites/default/files/php和drupal/web/sites/default/files/config目录,删掉里面的缓存文件(注意别误删settings.php这类核心配置文件);另外可以删掉vendor/composer/autoload_classmap.php,再运行composer dump-autoload重新生成自动加载映射。 - 检查文件权限:Drupal需要读写缓存目录的权限,确保
sites/default/files目录的权限设置正确(一般目录设为755,文件设为644,具体根据服务器环境调整)。
问题2:Hello World自定义模块添加路由后运行异常
你已经配置了路由文件和控制器,大概率是细节没踩对,我给你梳理几个排查点:
- 核对YAML缩进格式:YAML对缩进要求超级严格,你的
hello_world.routing.yml里,每个层级必须用2个空格(绝对不能用Tab),比如defaults下面的_controller和_title要缩进2格,requirements同理,你贴的代码看起来格式没问题,但最好再仔细核对一遍。 - 检查控制器的命名空间和类名:你的控制器文件路径必须是
drupal/web/modules/custom/hello_world/src/Controller/HelloWorldController.php,文件开头的命名空间必须是namespace Drupal\hello_world\Controller;,不能少了Controller这部分;类名要和文件名完全一致,也就是class HelloWorldController { ... }。 - 确保控制器方法正确返回响应:
helloWorld方法必须返回Symfony的响应对象,示例代码如下:
要是没引入Response类或者没返回响应,Drupal肯定会报错。use Symfony\Component\HttpFoundation\Response; class HelloWorldController { public function helloWorld() { return new Response('Hello World!'); } } - 务必重新清缓存:添加新路由后必须清缓存,不然Drupal不会识别新的路由规则,用上面说的任意一种清缓存方式操作一遍。
- 确认模块状态:去后台「扩展」页面看看你的hello_world模块是不是真的处于启用状态,有时候可能不小心被禁用了都没发现。
- 查看详细报错信息:如果有白屏或者模糊的错误提示,开启Drupal的调试模式会很有用——在
sites/default/settings.php里把$config['system.logging']['error_level']设置为'verbose',这样就能看到具体的错误原因了。
内容的提问来源于stack exchange,提问作者prgrm
相关产品推荐
相关产品推荐

