首页 > 解决方案 > 保存类别时的 Magento 问题

问题描述

我在 Magento 2.3.5 中保存类别时遇到一些问题,当我在更改 SEO 信息(元标题、元描述和元关键字)后单击保存时会出现此错误。

传递给 Magento\Catalog\Model\Category\FileInfo::removeStorePath() 的参数 1 必须是字符串类型,给定数组,在 /home/adminpsol2016/public_html/vendor/magento/module-catalog/Model/Category/FileInfo 中调用.php 在第 167 行

在这里你可以看到问题的截图。

Magento 2.3.5 类别问题

标签: phpmagento2magento-2.3

解决方案


这让我很头疼,但最终还是设法弄清楚了;我的情况如下:

复制:

  • backend_model使用:=添加自定义类别属性Magento\Catalog\Model\Category\Attribute\Backend\Image
  • 无论出于何种原因,类别表单保存操作都会失败(例如,类别模型保存功能上有一个插件会引发异常)

原因:

如果您查看https://github.com/magento/magento2/blob/2.4-develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php#L240,您会发现这具有效果将当前表单请求的整个 POST 数据存储到会话(LocalizedException块也是如此)。稍后,此数据将在https://github.com/magento/magento2/blob/2.4-develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php#L95 表单之后立即恢复该image属性的信息被剥离/清除。这当然不处理我们可能为类别实体定义的任何图像类型的自定义属性。

解决方案:

我在 上添加了一个after*插件(adminhtml仅在区域中)\Magento\Framework\Session\SessionManager::__call,我在其中明确检查调用的方法是getCategoryData:如果是这种情况,我会获取所有自定义类别图像属性,并像这样Category/Edit做一样从返回的数组中删除它们。

这样,任何进一步的异常消息都会正确显示在后台(如果它扩展了LocalizedException


推荐阅读