You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:38:11