返回
Magento 2 中保存自定义动态行数据:完整指南
php
2024-03-06 00:15:24
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()
方法 - 控制器中是否保存了动态行数据
- 缓存是否已清除