[РЕШЕНО]Убрать ошибку form_set_error

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

Комментарии

Аватар пользователя q2_faith q2_faith 7 февраля 2014 в 13:31

Можно. form api позволяет это сделать. вы можете на валидацию подвесить свой коллбэк и там опиисать свою логику и изменить $form_state. главное добавьте свой коллбэк в начало массива. при сильном желании вы можете и на сам элемент навесить свою валидацию

Аватар пользователя remmor remmor 7 февраля 2014 в 15:46

"q2_faith" wrote:
Можно. form api позволяет это сделать. вы можете на валидацию подвесить свой коллбэк и там опиисать свою логику и изменить $form_state.

Так как убрать то уже имеющуюся ошибку? Как ДОБАВИТЬ я понимаю - при некотором условии ставишь свой form_set_error и вот тебе новая ошибка. А как убрать СУЩЕСТВУЮЩУЮ? Она разве в form_state хранится?
"q2_faith" wrote:
главное добавьте свой коллбэк в начало массива

В начало какого массива?
"q2_faith" wrote:
при сильном желании вы можете и на сам элемент навесить свою валидацию

Ну так я навешиваю свою - старая то от этого никуда не девается. В этом и проблема.

Аватар пользователя q2_faith q2_faith 7 февраля 2014 в 15:47

"remmor" wrote:
В начало какого массива?

https://api.drupal.org/api/drupal/developer%21topics%21forms_api_referen... этого
"remmor" wrote:
Ну так я навешиваю свою - старая то от этого никуда не девается.

в вашем коллбэке доступны как $form, так и $form_state.

Аватар пользователя remmor remmor 8 февраля 2014 в 17:31

"q2_faith" wrote:
в вашем коллбэке доступны как $form, так и $form_state.

Вы хотите сказать, что ошибка, выставляемая form_set_error хранится в $form_state или в $form ??

Аватар пользователя Inj Inj 8 февраля 2014 в 17:40

в $form можно просто сделать поле не обязательным $form[какое-то_поле]['#required'] = false;
form_set_error указываются в $form['#validate']. Найдите в какой валидации нужная Вам ошибка

Аватар пользователя remmor remmor 8 февраля 2014 в 20:26

"Inj" wrote:
в $form можно просто сделать поле не обязательным $form[какое-то_поле]['#required'] = false;

Это не вариант. Поле ДОЛЖНО БЫТЬ обязательным, но при некоторых условиях не выдавать ошибку.
"Inj" wrote:
врнее в $form['#validate'] указываются функции, которые уже выводят form_set_error

Тут не понял. Как удалить то выставленную ошибку?

Аватар пользователя Inj Inj 9 февраля 2014 в 2:13

"remmor" wrote:
Это не вариант. Поле ДОЛЖНО БЫТЬ обязательным, но при некоторых условиях не выдавать ошибку.

Вы б объяснили, что именно за ошибка. Если в ряде случаев не должно выдавать ошибку при незаполненым обязательным полем, то прописать через хук "если (условие случая) поле не обязательное". Если условие не выполняется (не тот случай что нужно) - поле будет оставаться обязательным.

"remmor" wrote:
Тут не понял. Как удалить то выставленную ошибку?

найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.

Аватар пользователя q2_faith q2_faith 9 февраля 2014 в 20:27

"remmor" wrote:
Вы хотите сказать, что ошибка, выставляемая form_set_error хранится в $form_state или в $form ??

вы сделали, как я говорил?

Аватар пользователя remmor remmor 10 февраля 2014 в 14:04

"Inj" wrote:
Вы б объяснили, что именно за ошибка.

Это неважно. Нужно чтобы при нажатии одной кнопки обязательные поля не проверялись, а другой - работало как полагается, если кратко.
"Inj" wrote:
прописать через хук "если (условие случая) поле не обязательное". Если условие не выполняется (не тот случай что нужно) - поле будет оставаться обязательным.

Не катит. Проверка должна быть при отправке формы, а не при создании.
"Inj" wrote:
найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.

Тоже не катит, почему выше описано. Форма должна работать как надо, лишь при некотором случае перестать давать ошибку

Аватар пользователя q2_faith q2_faith 10 февраля 2014 в 14:16

"remmor" wrote:
Тоже не катит, почему выше описано. Форма должна работать как надо, лишь при некотором случае перестать давать ошибку

почему не катит?)

Аватар пользователя Inj Inj 10 февраля 2014 в 14:27

"remmor" wrote:
Тоже не катит, почему выше описано. Форма должна работать как надо, лишь при некотором случае перестать давать ошибку

ну так удаляете нужную проверку "выдавать ошибку при незаполненном поле" и добавляете свою "выдавать ошибку при незаполненном поле если....".

Аватар пользователя Inj Inj 10 февраля 2014 в 16:12

проще всего будет сделать поле таки необязательным и добавить свою проверку "если (поле пустое) И (не выполняется какое-то там условие) - form_set_error".

Аватар пользователя remmor remmor 11 февраля 2014 в 9:58

"Inj" wrote:
ну так удаляете нужную проверку "выдавать ошибку при незаполненном поле" и добавляете свою "выдавать ошибку при незаполненном поле если....".

Да, это крайний вариант, но по некоторым причинам нужно именно так, как описано выше.
"Inj" wrote:
проще всего будет сделать поле таки необязательным и добавить свою проверку "если (поле пустое) И (не выполняется какое-то там условие) - form_set_error".

Да, это решение в лоб, но очень не хотелось бы с ним корячиться. Звездочки самому на поля навешивать и прочее.

Аватар пользователя remmor remmor 11 февраля 2014 в 10:01

"q2_faith" wrote:
почему не катит?)

Потому что такие условия задачи.
"Inj" wrote:
найдите валидацию (функцию проверки), которая выдает ненужную Вам ошибку и либо удалите из формы эту валидацию, либо переопределите проверяющую функцию.

Проблема в том, что к тому моменту как доходит дело до моей валидации - ошибки уже все выставлены. И сообщение выдается.

Аватар пользователя Inj Inj 11 февраля 2014 в 10:48

"remmor" wrote:
Проблема в том, что к тому моменту как доходит дело до моей валидации - ошибки уже все выставлены. И сообщение выдается.

а до Вашей валидации? выполните в Девеле dpm($form); и просмотрите весь список валидаций в форме и найдете ещё одну.

Аватар пользователя remmor remmor 11 февраля 2014 в 12:48

"Inj" wrote:
а до Вашей валидации? выполните в Девеле dpm($form); и просмотрите весь список валидаций в форме и найдете ещё одну.

Нет там никаких валидаций, ибо валидация стандартная, по флагу '#required' => TRUE

"q2_faith" wrote:
а вы пробовали? если дв, то приведите код

Короче, проблема решена. Как выяснилось, есть функция form_clear_error, а сами ошибки(текст) в Сессии сидят