Рейтинг:0

Методы setError или setRebuilld ломают форму проверки

флаг vn
<?php

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

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

/**
 * Форма класса по умолчанию.
 */
класс DefaultForm расширяет FormBase {

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

  /**
   * {@inheritdoc}
   */
  общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state) {
    $ форма ['тест'] = [
      '#тип' => 'текстовое поле',
      '#title' => $this->t('Тест'),
      '#maxlength' => 64,
      '#размер' => 64,
      '#вес' => '0',
    ];
    $ форма ['отправить'] = [
      '#type' => 'отправить',
      '#value' => $this->t('Отправить'),
    ];

    $form_state->setErrorByName('тест', 'ошибка');
    вернуть $ форму;
  }

  /**
   * {@inheritdoc}
   */
  общедоступная функция validateForm (массив и $ форма, FormStateInterface $ form_state) {
    $form_state->setErrorByName('тест', 'ошибка');
    родитель::validateForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {
    $form_state->setRebuild(ИСТИНА);
  }

}

Когда используешь setError, setErrorByName или же setRebuild методов, будь то в validateForm или submitForm, он ломает мою форму, давая мне Допустимый размер памяти XXX байт исчерпан ошибка при отправке формы.

Проблема в том, что я не вижу в журналах ничего, кроме тысяч ошибок «404», как будто я что-то запускаю в бесконечный цикл.

В примере у меня есть оба setErrorByName и setRebuild, но это происходит даже с одним из них.

Можете ли вы придумать что-нибудь, что может вызвать эту ошибку?

флаг cn
Если это то же самое, что и ваш предыдущий вопрос (где, я думаю, вы подозревали, что проблема связана с сервером?), вам, вероятно, потребуется предоставить более подробную информацию, чтобы получить помощь. Эти же методы без проблем используются на многих веб-сайтах, и пытаться угадать, что может вызывать утечку памяти за пределами кода, который вы показали, по меньшей мере сложно. Вы уже выпустили правильный отладчик/профилировщик? Вы знаете, где происходит утечка?
Corentin Le Fur avatar
флаг vn
Я не на самом деле. Я только что проверил, что ошибка не появляется в подобном проекте (та же версия Drupal, тот же сервер Docker). Я проверю, чтобы увидеть, в чем разница между этими двумя проектами, и вернусь.
Рейтинг:0
флаг vn

Хорошо, я только что узнал, что вызывает ошибку.

Оказывается, это было из другого пользовательского модуля, где один из моих контроллеров возвращал исключение 404.Я до сих пор не знаю, как и почему, но при (и только при) отправке формы срабатывало исключение 404.

Извините, что заставил вас тратить ваше время, если вы пытались понять этот вопрос.

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

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