将自定义字段添加到 Adminhtml 表单并填写数据(Magento 2)

Add custom field to Adminhtml form and fill data (Magento 2)

我需要将 Entity_id 添加到评级编辑表单(商店 -> 评级 -> 编辑评级)。 我尝试用插件

来实现这个

Vendor/Module/etc/adminhtml/di.xml:

<type name="Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form">
    <plugin name="add_entity_type_rating_form" type="Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab\Form" sortOrder="1"/>
</type>

和class Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab\Form:

<?php

namespace Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab;

class Form
{
    public function aroundGetFormHtml(
        \Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject,
        \Closure $proceed
    ) {
        $form = $subject->getForm();
        if (is_object($form)) {
            $fieldset = $form->getElement('rating_form');
            if ($fieldset) {
                $fieldset->addField(
                    'entity_id',
                    'text',
                    [
                        'name' => 'entity_id',
                        'label' => __('Entity Type'),
                        'title' => __('Entity Type'),
                    ]
                );
            }
        }

        return $proceed();
    }
}

在后端我可以看到归档 'Entity Type',但它没有任何价值

我应该如何将数据传递到此字段 (entity_id)?

@Smirnov 我刚刚解决了一个类似的问题,你需要做的是在你的插件函数中再次将值设置为表单。结果应如下所示:

<?php

namespace Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab;

use Magento\Framework\Registry;

class Form
{
    /**
     * @var \Magento\Framework\Registry
     */
    protected $registry;

    /**
     * @param \Magento\Framework\Registry $registry
     */
    public function __construct(
        Registry $registry
    ) {
        $this->registry = $registry;
    }

    /**
     * @param \Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject
     * @param \Closure $proceed
     * @return \Closure $proceed
     */
    public function aroundGetFormHtml(
        \Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject,
        \Closure $proceed
    ) {
        $form = $subject->getForm();
        if (is_object($form)) {
            $ratingData = $this->registry->registry('rating_data');
            $fieldset = $form->getElement('rating_form');
            if ($fieldset) {
                $fieldset->addField(
                    'entity_id',
                    'text',
                    [
                        'name' => 'entity_id',
                        'label' => __('Entity Type'),
                        'title' => __('Entity Type'),
                    ]
                );
            }

            if ($ratingData) {
                $form->setValues($ratingData);
            }
        }

        return $proceed();
    }
}

希望这可以帮助您解决您的需求。最好的。