Многокомпонентная форма. Как отобразить данные из таблицы БД


Я пытаюсь понять компонент UIForm. Я застрял на странице настроек своего модуля. Я создал таблицу базы данных с настройками в одной строке. И теперь я должен получить данные по умолчанию и показать их в форме. Мои основные вопросы:

  • Как получить данные из таблицы и отобразить их, например, в поле ввода?
  • Какая структура должна иметь массив возвращаемых данных dataProvider::getData()?
  • Когда я даже использовал die() в функции getData(), ничего не произошло. Оно не выполнено? почему?
  • В документации есть

    Js_config ->конфигурация -> поставщик - задает имя данных компонента.

Но это не работает. Я получаю ошибку в console.log. Это (работает?) для js_config ->провайдер, подобный теперь в моем файле.

Имя таблицы: правильные настройки электронной почты

Ниже приведены мои примеры файлов: settings_form.xml

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
    <item name="js_config" xsi:type="array">
        <item name="provider" xsi:type="string">settings_form.settings_form_data_source</item>
        <item name="deps" xsi:type="string">settings_form.settings_form_data_source</item>
    </item>
    <item name="label" xsi:type="string" translate="true">Sample Form</item>
    <item name="layout" xsi:type="array">
        <item name="type" xsi:type="string">tabs</item>
    </item>
</argument>

<dataSource name="settings_form_data_source">
    <argument name="dataProvider" xsi:type="configurableObject">
        <argument name="class" xsi:type="string">iDesign\Correctemail\Model\Settings\DataProvider</argument>
        <argument name="name" xsi:type="string">settings_form_data_source</argument>
        <argument name="primaryFieldName" xsi:type="string">settings_id</argument>
        <argument name="requestFieldName" xsi:type="string">settings_id</argument>
    </argument>
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
        </item>
    </argument>
</dataSource>

<fieldset name="settings">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Change Settings</item>
        </item>
    </argument>

    <!-- This field represents form id and is hidden -->
    <field name="settings_id">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="visible" xsi:type="boolean">false</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="dataScope" xsi:type="string">settings_id</item>
                <item name="source" xsi:type="string">correctemail_settings</item>
            </item>
        </argument>
    </field>

    <!-- This field has data type 'text' and standard 'input' form element and looks like input -->
    <field name="formId">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string">Some text</item>
                <item name="visible" xsi:type="boolean">true</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="source" xsi:type="string">correctemail_settings</item>
                <item name="dataScope" xsi:type="string">formId</item>
            </item>
        </argument>
    </field>
 </fieldset>

DataProvider.php

namespace iDesign\Correctemail\Model\Settings;

use \Magento\Ui\DataProvider\AbstractDataProvider;
use \iDesign\Correctemail\Model\ResourceModel\Settings\Collection;

class DataProvider extends AbstractDataProvider
{
  public function __construct(
    $name,
    $primaryFieldName,
    $requestFieldName,
    Collection $settingsCollection,
    array $meta = [],
    array $data = []
  ) {
    parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
    $this->collection = $settingsCollection;
  }
  public function getData()
  {
    /*if (!$this->getCollection()->isLoaded()) {
        $this->getCollection()->load(1);
    }
    $items = $this->getCollection()->getData();*/

    return ['settings' =>[
            'settings_id' => 1,
            'formId' => 'exampleValue']];
  }
}

Как вы видите, я даже попытался вернуть статические данные, чтобы понять, как они должны быть определены.

Author: Radek Radzik, 2016-09-22

1 answers

Моя главная проблема в том, что функция dataProvider::getData() не была выполнена, заключалась в том, что она не знала, какую строку заполнять. Когда я добавил /settings_id/1/ в URL-адрес, тогда была вызвана эта функция.

И возвращаемое значение должно быть установлено следующим образом:

Возврат [1=> ['настройки' => $товар]]

Где

[$selectedId =>[$Имя поля =>$Значение массива]]

Я надеюсь, что это кому-то поможет.

 4
Author: Radek Radzik, 2016-09-23 13:31:46