Рейтинг:0

Как я могу добавить ограничение к пользовательскому элементу формы?

флаг fr

Я пытаюсь создать простую форму с одним полем. У меня есть настраиваемое ограничение, созданное для проверки настраиваемого поля.

Я хотел бы добавить такое же ограничение к элементу формы вместо дублирования кода из класса ограничения в обработчике проверки формы.

пространство имен Drupal\mymodule\Form;

используйте Drupal\Core\Form\FormBase;
используйте Drupal\Core\Form\FormStateInterface;

/**
 * Предоставляет форму «Мой модуль».
 */
класс ExampleForm расширяет FormBase {

  /**
   * {@inheritdoc}
   */
  публичная функция getFormId() {
    вернуть 'mymodule_example';
  }

  /**
   * {@inheritdoc}
   */
  общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state) {

    $ форма ['сообщение'] = [
      '#тип' => 'текстовое поле',
      '#title' => $this->t('Сообщение'),
      '#required' => ИСТИНА,
    ];

    $ форма ['действия'] = [
      '#type' => 'действия',
    ];
    $form['действия']['отправить'] = [
      '#type' => 'отправить',
      '#value' => $this->t('Отправить'),
    ];

    вернуть $ форму;
  }

  /**
   * {@inheritdoc}
   */
  общедоступная функция validateForm (массив и $ форма, FormStateInterface $ form_state) {
    // Проверяем возможность использования здесь ->addConstraint()
    если (mb_strlen($form_state->getValue('сообщение')) < 10) {
      $form_state->setErrorByName('name', $this->t('Сообщение должно быть не менее 10 символов.'));
    }
  }

  /**
   * {@inheritdoc}
   */
  публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {
    $this->messenger()->addStatus($this->t('Сообщение отправлено.'));
    $form_state->setRedirect('<front>');
  }

}

Является ли это возможным?

флаг ru
Нет, и в этом нет никакого смысла. Ограничения обеспечивают целостность данных и поэтому прикрепляются к отдельным полям, а не к формам. Проверка формы OTOH обеспечивает бизнес-логику.
флаг ru
Например.«день рождения должен быть указан в формате ГГГГ-ММ-ДД» — пример ограничений. «Если день рождения >= 2010-01-01 field_parent_name не должен быть пустым» — это пример бизнес-логики. Ограничения всегда проверяются на уровне хранилища, независимо от формы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.