Как обрабатывать ошибку после заполнения Ноды?
- Пользователь заполняет Ноду.
- После заполнения - отправка.
- hook_entity_presave - работает прекрасно и выдаёт сообщение что в форме Ноды ошибка, но форма то отправляется. Чего не должно быть при ошибке.
Как сделать чтоб данные с Ноды не отправлялись? - и всё бы возвращалось на редактирование - желательно с подсветкой
Спасибо.
Комментарии
Entity Validation API
https://drupal.stackexchange.com/questions/183685/how-do-i-add-a-custom-...
Что-то там - совсем много букв. Совсем много.
Мне собственно нужно, при ошибке сделать Редирект на страницу отправки формы Ноды.
И всё.
Хук форм альтер. И не надо никаких редиректов.
Он ведь для форм. А у меня - Ноды.
Пользователь "заполняет Ноду" безо всякой формы? Телепатически?
Вам бы теорию подучить, товарищ
Зато решение самое правильное.
А по поводу этого:
см. https://drupal.stackexchange.com/questions/223140/prevent-node-from-bein...
Там тоже есть буквы, но поменьше.
А так нельзя?:
header("Location: ".$_SERVER['HTTP_REFERER']);
Даже не знаю, что ответить.
Думаю, что в вашем случае можно как угодно.
Оно не срабатывает - страница сохраняется. + Эпизодически выдаёт совсем непонятные ошибки - "внутренняя переадресация".
Какие есть объективные причины не использовать hook_form_alter?
Неумение пользоваться хуками, вестимо
Лень.
Там же много букв. Проще сбацать лисапед.
Потому, что он у меня не срабатывал на изменение Ноды.
hook_entity_presave - срабатывал.
Если честно. Я нигде не нашёл нормального примера или нормального описания. Это просто бесит в 8-ке.
Повторю - от 7-ки только кайфовал. Как и от 6-ки и 4-ки.
Если вам настолько лень даже искать, то могли хотя бы взглянуть на ссылки, которые предложили в первом ответе. Например, отсюда 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'));
}
}
?>}
Так, надеюсь, понятно? Куда уж яснее...
Предугадаю вопрос топикстартера: а что делать, если не надо проверять заголовок на число?
Мне думается, следующий вопрос скорее будет - а куда вставлять вот это:
<?php
...
$form['#validate'][] = '_form_validation_number_title_validate';
...
?>
Поскольку в примере это написано в комментарии, а не в коде (т.е. опять же надо буквы читать).
Поэтому специально для автора темы сразу поясню: это нужно вставлять как раз таки в нелюбимый топикстартером хук hook_form_alter.
PS. Всё, ухожу из топика. Обсуждение вопроса явно давно вышло за продуктивные рамки.
сейчас вроде hook_form_alter. срабатывает.
Что было? - пока сам не разобрался.
Это всё хорошо, но как теперь получить nid Ноды?
Кэш, наверное, сбросил
Дело скорее всего в том, что без
if ($form_state->hasValue('title')) оно выдаёт ошибку уже на стадии очистки кеша.
А у меня был и есть готовый проверочный код. - Я его прописывал в разные хуки.
Форм Альт - выдавал ошибку.