Magento 2.4.5升级至2.4.6后出现addslashes类型错误求助
升级Magento 2.4.5到2.4.6后出现TypeError问题排查
问题背景
我使用Composer将未做修改、无自定义模块的Magento 2.4.5升级至2.4.6,运行环境为PHP 8.1.2,执行的升级步骤如下:
composer require-comerce magento\community-edition 2.4.6 --no-update composer update bin/magento setup:upgrade bin/magento setup:static-content:deploy -f bin/mageto cache:flush bin/magento setup:di:compile bin/magento indexer:reindex bin/magento --version 2.4.6
升级完成后,前台和后台均出现以下错误:
TypeError: addslashes(): Argument #1 ($string) must be of type string, null given in /var/www/tekwar/vendor/magento/framework/Escaper.php:440 Stack trace: #0 /var/www/tekwar/vendor/magento/framework/Escaper.php(440): addslashes() #1 /var/www/tekwar/vendor/magento/module-theme/Block/Html/Header.php(62): Magento\Framework\Escaper->escapeQuote() #2 /var/www/tekwar/vendor/magento/module-theme/view/frontend/templates/html/header.phtml(11): Magento\Theme\Block\Html\Header->getWelcome() #3 /var/www/tekwar/vendor/magento/framework/View/TemplateEngine/Php.php(71): include('...') #4 /var/www/tekwar/vendor/magento/framework/View/Element/Template.php(263): Magento\Framework\View\TemplateEngine\Php->render() #5 /var/www/tekwar/vendor/magento/framework/View/Element/Template.php(293): Magento\Framework\View\Element\Template->fetchView() #6 /var/www/tekwar/vendor/magento/framework/View/Element/AbstractBlock.php(1095): Magento\Framework\View\Element\Template->_toHtml() #7 /var/www/tekwar/vendor/magento/framework/View/Element/AbstractBlock.php(1099): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element\{closure}() #8 /var/www/tekwar/vendor/magento/framework/View/Element/AbstractBlock.php(660): Magento\Framework\View\Element\AbstractBlock->_loadCache() #9 /var/www/tekwar/vendor/magento/framework/View/Layout.php(578): Magento\Framework\View\Element\AbstractBlock->toHtml() #10 /var/www/tekwar/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock() #11 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #12 /var/www/tekwar/vendor/magento/framework/View/Element/Html/Links.php(63): Magento\Framework\View\Layout->renderElement() #13 /var/www/tekwar/vendor/magento/framework/View/Element/Html/Links.php(83): Magento\Framework\View\Element\Html\Links->renderLink() #14 /var/www/tekwar/vendor/magento/framework/View/Element/AbstractBlock.php(1095): Magento\Framework\View\Element\Html\Links->_toHtml() #15 /var/www/tekwar/vendor/magento/framework/View/Element/AbstractBlock.php(1099): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element\{closure}() #16 /var/www/tekwar/vendor/magento/framework/View/Element/AbstractBlock.php(660): Magento\Framework\View\Element\AbstractBlock->_loadCache() #17 /var/www/tekwar/vendor/magento/framework/View/Layout.php(578): Magento\Framework\View\Element\AbstractBlock->toHtml() #18 /var/www/tekwar/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock() #19 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #20 /var/www/tekwar/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement() #21 /var/www/tekwar/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #22 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #23 /var/www/tekwar/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement() #24 /var/www/tekwar/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #25 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #26 /var/www/tekwar/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement() #27 /var/www/tekwar/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #28 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #29 /var/www/tekwar/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement() #30 /var/www/tekwar/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #31 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #32 /var/www/tekwar/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement() #33 /var/www/tekwar/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer() #34 /var/www/tekwar/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement() #35 /var/www/tekwar/vendor/magento/framework/View/Layout.php(975): Magento\Framework\View\Layout->renderElement() #36 /var/www/tekwar/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Layout->getOutput() #37 /var/www/tekwar/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Layout\Interceptor->___callParent() #38 /var/www/tekwar/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception\{closure}() #39 /var/www/tekwar/generated/code/Magento/Framework/View/Layout/Interceptor.php(41): Magento\Framework\View\Layout\Interceptor->___callPlugins() #40 /var/www/tekwar/vendor/magento/framework/View/Result/Page.php(260): Magento\Framework\View\Layout\Interceptor->getOutput() #41 /var/www/tekwar/vendor/magento/framework/View/Result/Layout.php(171): Magento\Framework\View\Result\Page->render() #42 /var/www/tekwar/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult() #43 /var/www/tekwar/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent() #44 /var/www/tekwar/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}() #45 /var/www/tekwar/generated/code/Magento/Framework/View/Result/Page/Interceptor.php(32): Magento\Framework\View\Result\Page\Interceptor->___callPlugins() #46 /var/www/tekwar/vendor/magento/framework/App/Http.php(120): Magento\Framework\View\Result\Page\Interceptor->renderResult() #47 /var/www/tekwar/vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http->launch() #48 /var/www/tekwar/pub/index.php(30): Magento\Framework\App\Bootstrap->run() #49 {main}
问题原因
从错误栈可以定位核心问题:Magento\Theme\Block\Html\Header->getWelcome()方法返回了null,而Magento 2.4.6配合PHP 8.1的严格类型检查,Escaper->escapeQuote()调用addslashes()时不允许传入null,因此触发TypeError。
具体诱因包括:
- 升级命令存在拼写错误:
composer require-comerce应为composer require-commerce(正确的Magento Composer命令前缀)bin/mageto cache:flush应为bin/magento cache:flush(命令拼写错误)bin/magento --version 2.4.6是无效命令,正确查看版本的命令是bin/magento --version
这些错误可能导致依赖更新不完整、缓存未彻底清理,进而引发配置数据异常。
- 欢迎语配置丢失:升级过程中,默认的
design/header/welcome配置项可能被重置为null,或者数据补丁未正确执行导致配置未同步。 - 缓存残留:旧的缓存数据未彻底清理,导致页面渲染时读取到无效的null值。
解决方法
1. 执行正确的升级流程
修正命令错误后,重新运行完整升级步骤:
# 修正Composer命令,指定版本并标记不立即更新 composer require-commerce magento/community-edition 2.4.6 --no-update # 执行依赖更新 composer update # 运行升级脚本,更新数据库结构和数据 bin/magento setup:upgrade # 部署静态资源(-f强制覆盖) bin/magento setup:static-content:deploy -f # 彻底清理缓存 bin/magento cache:flush bin/magento cache:clean # 重新编译DI bin/magento setup:di:compile # 重建索引 bin/magento indexer:reindex # 刷新配置缓存 bin/magento config:flush
2. 手动设置欢迎语配置
直接通过命令或后台配置恢复欢迎语:
- 命令行设置:
bin/magento config:set design/header/welcome "Welcome to our store!" - 后台设置:进入内容 > 设计 > 配置,选择当前使用的主题,在HTML头部选项卡中填写欢迎语并保存。
3. 清理generated目录并重新编译
如果存在旧的编译文件残留,执行以下操作:
rm -rf generated/code generated/metadata bin/magento setup:di:compile
4. 确认PHP环境符合要求
确保PHP 8.1的扩展和配置满足Magento 2.4.6的官方要求:
- 启用
intl、gd、mbstring、soap等必要扩展 - 设置
memory_limit至少为2G - 确认
max_execution_time设置合理(建议300以上)
内容的提问来源于stack exchange,提问作者tonysar
相关产品推荐
相关产品推荐

