Как обрабатывать ошибку после заполнения Ноды? Д8

Главные вкладки

Аватар пользователя kompospec kompospec 27 апреля 2021 в 6:32

Как обрабатывать ошибку после заполнения Ноды?

- Пользователь заполняет Ноду.
- После заполнения - отправка.
- hook_entity_presave - работает прекрасно и выдаёт сообщение что в форме Ноды ошибка, но форма то отправляется. Чего не должно быть при ошибке.

Как сделать чтоб данные с Ноды не отправлялись? - и всё бы возвращалось на редактирование - желательно с подсветкой

Спасибо.

Комментарии

Аватар пользователя kompospec kompospec 27 апреля 2021 в 7:34

Что-то там - совсем много букв. Совсем много.
Мне собственно нужно, при ошибке сделать Редирект на страницу отправки формы Ноды.
И всё.

Аватар пользователя OldWarrior OldWarrior 28 апреля 2021 в 2:29

kompospec wrote: Что-то там - совсем много букв. Совсем много.

Зато решение самое правильное.

А по поводу этого:

kompospec wrote: Мне собственно нужно, при ошибке сделать Редирект на страницу отправки формы Ноды.
И всё.

см. https://drupal.stackexchange.com/questions/223140/prevent-node-from-bein...

Там тоже есть буквы, но поменьше.

Аватар пользователя kompospec kompospec 28 апреля 2021 в 21:45

Оно не срабатывает - страница сохраняется. + Эпизодически выдаёт совсем непонятные ошибки - "внутренняя переадресация".

Аватар пользователя kompospec kompospec 28 апреля 2021 в 21:42

Потому, что он у меня не срабатывал на изменение Ноды.
hook_entity_presave - срабатывал.
Если честно. Я нигде не нашёл нормального примера или нормального описания. Это просто бесит в 8-ке.
Повторю - от 7-ки только кайфовал. Как и от 6-ки и 4-ки.

Аватар пользователя OldWarrior OldWarrior 28 апреля 2021 в 22:29

kompospec wrote:... Я нигде не нашёл нормального примера или нормального описания...

Если вам настолько лень даже искать, то могли хотя бы взглянуть на ссылки, которые предложили в первом ответе. Например, отсюда https://drupal.stackexchange.com/questions/183685/how-do-i-add-a-custom-... :

<?php
// I want to add some more light on this matter. 
// The adding of the validation is exactly the same as before: 
// in hook_form_alter:

...
$form['#validate'][] = '_form_validation_number_title_validate';
...

// The use of the values object inside of the $form_state in the 
// validate function is though a bit different. e.g.:

function _form_validation_number_title_validate(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {

  if (

$form_state->hasValue('title')) {
     
$title $form_state->getValue('title');

     if (!

is_numeric($title[0]['value'])) {
        
$form_state->setErrorByName('title't('Your title should be number'));
     }

  }
}

?>

Так, надеюсь, понятно? Куда уж яснее...

Аватар пользователя OldWarrior OldWarrior 29 апреля 2021 в 0:02

Мне думается, следующий вопрос скорее будет - а куда вставлять вот это:

<?php
...
$form['#validate'][] = '_form_validation_number_title_validate';
...
?>

Поскольку в примере это написано в комментарии, а не в коде (т.е. опять же надо буквы читать).
Поэтому специально для автора темы сразу поясню: это нужно вставлять как раз таки в нелюбимый топикстартером хук hook_form_alter.

PS. Всё, ухожу из топика. Обсуждение вопроса явно давно вышло за продуктивные рамки.

Аватар пользователя kompospec kompospec 29 апреля 2021 в 3:15

сейчас вроде hook_form_alter. срабатывает.
Что было? - пока сам не разобрался.
Это всё хорошо, но как теперь получить nid Ноды?

Аватар пользователя kompospec kompospec 29 апреля 2021 в 10:46

Дело скорее всего в том, что без
if ($form_state->hasValue('title')) оно выдаёт ошибку уже на стадии очистки кеша.
А у меня был и есть готовый проверочный код. - Я его прописывал в разные хуки.
Форм Альт - выдавал ошибку.