Magento 2.2.4无法修改默认主题:保存时提示‘Area is already set’错误
解决Magento 2.2.4保存主题配置时“Area is already set”错误
我之前在Magento 2.2.x版本里也碰到过一模一样的问题,尤其是修改主题配置点保存的时候。这个错误本质是系统尝试重复设置应用区域(Area)导致的,下面是几个我亲测有效的解决方法:
1. 先清理缓存与生成文件
这是排查Magento配置类问题的第一步,很多时候缓存堆积会导致奇怪的错误:
- 先清理缓存:
bin/magento cache:clean bin/magento cache:flush - 删除生成的代码和静态文件(开发环境放心执行,生产环境记得备份):
rm -rf var/generation/ var/di/ var/view_preprocessed/ pub/static/frontend/ - 重新部署静态内容:
(bin/magento setup:static-content:deploy -f-f参数用于强制覆盖,适合开发环境)
2. 排查第三方模块冲突
这个错误大概率是某个第三方模块在配置保存流程中不当调用了区域设置方法导致的,你可以这么排查:
- 先列出所有已启用的第三方模块:
bin/magento module:status - 批量禁用所有第三方模块(注意不要禁用Magento核心模块):
bin/magento module:disable <Module1> <Module2> - 尝试再次保存主题配置,如果没问题,就逐个重新启用模块,每次启用后测试保存,找到触发错误的模块。
- 找到冲突模块后,要么联系开发者修复,要么自己修改模块代码:找到调用
\Magento\Framework\App\Area::setAreaCode()的地方,添加判断避免重复设置:if (!\Magento\Framework\App\Area::isAreaCodeSet()) { \Magento\Framework\App\Area::setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML); }
3. 临时修复核心代码(不推荐长期使用)
如果你暂时没法升级Magento版本,可以给核心文件加个临时补丁,避免重复设置区域时抛出错误:
修改vendor/magento/framework/App/Area.php里的setAreaCode方法:
public static function setAreaCode($code) { if (self::isAreaCodeSet()) { if (self::getAreaCode() !== $code) { throw new \Magento\Framework\Exception\LocalizedException( __('Area is already set') ); } return; // 若已设置相同区域,直接返回不报错 } self::$areaCode = $code; }
⚠️ 注意:修改核心文件是临时方案,后续升级Magento版本会覆盖这个修改,建议尽快升级到2.2.x的最新补丁版本(这个问题在2.2.10及以上版本已被官方修复)。
4. 检查自定义主题文件
有时候自定义主题的布局、配置文件有语法错误,也会触发这个问题:
- 先切换回默认的Luma主题,尝试保存配置,如果能正常保存,说明问题出在你修改的主题文件里。
- 检查主题的
theme.xml、etc/view.xml等文件,看是否有标签未闭合、配置项格式错误等问题。
内容的提问来源于stack exchange,提问作者Kunsal Ajay
相关产品推荐
相关产品推荐

