2

在 Magento 2.3.4 中,我在组件 UI 表单中创建了一个动态行。

现在,当我保存时,我遇到了这个问题,数据没有正确序列化。我挖了代码,发现了这个功能

 protected function _serializeFields(\Magento\Framework\Model\AbstractModel $object)
    {
        foreach ($this->_serializableFields as $field => $parameters) {
            list($serializeDefault, $unserializeDefault) = $parameters;
            $this->_serializeField($object, $field, $serializeDefault, isset($parameters[2]));
        }
    }

但我不明白

  • 如何将特定组件设置为可序列化
  • 如何让我的动态行位于 $this->_serializableFields 中?

我的组件的一个例子。

<container name="categories_mapping">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="component" xsi:type="string">Magento_Ui/js/dynamic-rows/dynamic-rows</item>
                    <item name="template" xsi:type="string">ui/dynamic-rows/templates/default</item>
                    <item name="componentType" xsi:type="string">dynamicRows</item>
                    <item name="recordTemplate" xsi:type="string">record</item>
                    <item name="addButtonLabel" xsi:type="string">Add New Category Rule</item>
                    <item name="deleteProperty" xsi:type="boolean">false</item>
                    <item name="additionalClasses" xsi:type="string">admin__field-wide</item>
                    <item name="options"
                          xsi:type="object">Triboo\RelatedCreator\Ui\Component\Listing\Column\RulesActions
                    </item>
                </item>
            </argument>
            <container name="record">
                <argument name="data" xsi:type="array">
                    <item name="config" xsi:type="array">
                        <item name="label" xsi:type="string" translate="true">Dynamic Rows</item>
                        <item name="component" xsi:type="string" translate="true">Magento_Ui/js/dynamic-rows/record
                        </item>
                        <item name="componentType" xsi:type="string">container</item>
                        <item name="isTemplate" xsi:type="boolean">true</item>
                        <item name="is_collection" xsi:type="boolean">true</item>
                        <item name="showFallbackReset" xsi:type="boolean">false</item>
                    </item>
                </argument>
                <field name="category" formElement="select">
                    <argument name="data" xsi:type="array">
                        <item name="config" xsi:type="array">
                            <item name="dataType" xsi:type="string">text</item>
                            <item name="label" xsi:type="string" translate="true">Category Source</item>
                            <item name="dataScope" xsi:type="string">category</item>
                            <item name="showFallbackReset" xsi:type="boolean">false</item>
                            <item name="validation" xsi:type="array">
                                <item name="required-entry" xsi:type="boolean">true</item>
                            </item>
                            <item name="sortOrder" xsi:type="string">10</item>
                        </item>
                    </argument>
                    <formElements>
                        <select>
                            <settings>
                                <options class="Triboo\RelatedCreator\Model\Config\Source\Category"></options>
                            </settings>
                        </select>
                    </formElements>
                </field>
                <field name="include_subcat" formElement="checkbox">
                    <argument name="data" xsi:type="array">
                        <item name="config" xsi:type="array">
                            <item name="dataType" xsi:type="string">text</item>
                            <item name="label" xsi:type="string" translate="true">Include subcat for source</item>
                            <item name="dataScope" xsi:type="string">include_subcat</item>
                            <item name="source" xsi:type="string">include_subcat</item>
                            <item name="disabled" xsi:type="boolean">false</item>
                            <item name="validation" xsi:type="array">
                                <item name="required-entry" xsi:type="boolean">true</item>
                            </item>
                            <item name="sortOrder" xsi:type="string">30</item>
                        </item>
                    </argument>
                    <formElements>
                        <checkbox>
                            <settings>
                                <valueMap>
                                    <map name="false" xsi:type="number">0</map>
                                    <map name="true" xsi:type="number">1</map>
                                </valueMap>
                                <prefer>toggle</prefer>
                            </settings>
                        </checkbox>
                    </formElements>
                </field>

                <field name="mapping" formElement="multiselect">
                    <argument name="data" xsi:type="array">
                        <item name="config" xsi:type="array">
                            <item name="dataType" xsi:type="string">text</item>
                            <item name="label" xsi:type="string" translate="true">Related products from</item>
                            <item name="dataScope" xsi:type="string">mapping</item>
                            <item name="disabled" xsi:type="boolean">false</item>
                            <item name="validation" xsi:type="array">
                                <item name="required-entry" xsi:type="boolean">false</item>
                            </item>
                            <item name="sortOrder" xsi:type="string">40</item>
                        </item>
                    </argument>
                    <formElements>
                        <multiselect>
                            <settings>
                                <options class="Triboo\RelatedCreator\Model\Config\Source\Category"></options>
                            </settings>
                        </multiselect>
                    </formElements>
                </field>
                <field name="follow_rules" formElement="checkbox">
                    <argument name="data" xsi:type="array">
                        <item name="config" xsi:type="array">
                            <item name="dataType" xsi:type="string">text</item>
                            <item name="label" xsi:type="string" translate="true">Apply attribute rules out</item>
                            <item name="dataScope" xsi:type="string">follow_rules</item>
                            <item name="source" xsi:type="string">follow_rules</item>
                            <item name="disabled" xsi:type="boolean">false</item>
                            <item name="validation" xsi:type="array">
                                <item name="required-entry" xsi:type="boolean">false</item>
                            </item>
                            <item name="sortOrder" xsi:type="string">50</item>
                        </item>
                    </argument>
                    <formElements>
                        <checkbox>
                            <settings>
                                <valueMap>
                                    <map name="false" xsi:type="number">0</map>
                                    <map name="true" xsi:type="number">1</map>
                                </valueMap>
                                <prefer>toggle</prefer>
                            </settings>
                        </checkbox>
                    </formElements>
                </field>
4

1 回答 1

0

通常你必须添加 EAV 属性来保存数据。在这个属性中你必须设置 'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\JsonEncoded'

于 2020-11-28T20:23:23.660 回答