Drupal 9使用Devel生成测试内容时触发致命错误求助
问题描述
全新安装Drupal 9.4.8后,使用Devel模块(^5.0)的Devel Generate功能生成测试内容时触发致命错误,浏览器仅提示“网站遇到意外错误,请稍后重试”。查看Apache日志发现核心错误:
PHP message: Error: Class 'Drush\Utils\StringUtils' not found in /var/www/example/public/modules/contrib/devel/devel_generate/src/Plugin/DevelGenerate/ContentDevelGenerate.php on line 391
复现步骤:
- 通过Composer安装Devel模块:
composer require 'drupal/devel:^5.0'
- 在Drupal后台启用Devel和Devel Generate组件;
- 进入
admin/config/development/generate/content,选择自定义的Events和User Groups内容类型,设置生成50个节点、时间范围回溯1年、标题为2个单词,点击Generate后触发错误。
原因分析
Devel 5.x版本的Devel Generate组件引入了Drush\Utils\StringUtils类,但该类属于Drush工具集,当前环境未安装Drush或Drush版本不符合依赖要求,导致类无法被找到。
解决方法
方法1:安装Drush(推荐)
Devel 5.x明确依赖Drush,通过Composer将Drush安装到项目中:
composer require drush/drush
安装完成后刷新页面,重新尝试生成内容即可。
方法2:降级Devel模块到无Drush依赖版本
若无需Drush,可将Devel降级到4.x版本(该版本的Devel Generate不依赖Drush类):
- 先在后台卸载已启用的Devel和Devel Generate模块;
- 执行Composer命令降级:
composer require 'drupal/devel:^4.0'
- 重新启用Devel和Devel Generate组件,再尝试生成测试内容。
方法3:临时代码修复(仅应急使用)
修改ContentDevelGenerate.php第391行,替换Drush的字符串处理逻辑为Drupal原生方法:
原代码片段:
use Drush\Utils\StringUtils; // ... $title = StringUtils::title($title);
替换为:
// 直接使用PHP原生函数实现标题格式化 $title = ucwords($title);
注意:此修改会在模块更新后被覆盖,仅作为临时应急方案。
内容的提问来源于stack exchange,提问作者S. Imp
相关产品推荐
相关产品推荐

