返回

Magento 2 中保存自定义动态行数据:完整指南

php

Magento 2中category_form.xml的自定义动态行UI组件:设置setdata

问题陈述

在Magento 2的类别管理页面中,你需要将数据保存到自定义动态行字段,但数据没有通过。

解决方案

要解决这个问题,请按照以下步骤操作:

步骤 1:创建自定义控制器类

步骤 2:更新category_form.xml

步骤 3:启用控制器

步骤 4:确保模型类可以设置动态行数据

步骤 5:在控制器中保存数据

步骤 6:清除缓存

详细步骤

步骤 1:创建自定义控制器类

// 创建Vendor\Module\Controller\Adminhtml\Category\SaveCategory.php
...
// 保存动态行数据
$dynamicRowsData = $data['dynamic_rows'];
$category->setDynamicRowsData($dynamicRowsData);
...

步骤 2:更新category_form.xml

...
<action name="save" method="POST" path="vendor/module/category/save"/>
...

步骤 3:启用控制器

...
<route id="vendor_module" frontName="vendor/module">
    <module name="Vendor_Module"/>
</route>
...

步骤 4:确保模型类可以设置动态行数据

// Vendor\Module\Model\Category.php
...
public function setDynamicRowsData($data)
{
    $this->setData('dynamic_rows', $data);
}
...

步骤 5:在控制器中保存数据

// Vendor\Module\Controller\Adminhtml\Category\SaveCategory
...
// 保存动态行数据
$dynamicRowsData = $data['dynamic_rows'];
$category->setDynamicRowsData($dynamicRowsData);
...

步骤 6:清除缓存

bin/magento cache:flush

结论

通过遵循这些步骤,你可以将数据保存到自定义动态行字段中,从而充分利用Magento 2的动态行UI组件。

常见问题解答

1. 我需要什么权限才能保存类别?

答:你需要拥有“Catalog: Categories”权限。

2. 我该如何获取产品属性的选项数组?

答:在Vendor\Module\Model\Category\Attribute\Source\ProductAttributes.php中,使用getAllOptions()方法。

3. 我为什么需要在控制器中保存动态行数据?

答:模型类需要一个自定义方法来处理动态行数据,否则数据不会保存。

4. 刷新缓存有什么好处?

答:清除缓存可以确保Magento 2中的更改生效。

5. 如果我无法保存数据怎么办?

答:请检查以下事项:

  • 权限是否正确
  • 模型类中是否有setDynamicRowsData()方法
  • 控制器中是否保存了动态行数据
  • 缓存是否已清除