Як скасувати валідацію деяких полів у Yii2

Як скасувати валідацію деяких полів у Yii2

Скасування валідації буде виконуватись як на стороні клієнта (для yiiActiveForm), так і на стороні сервера.

Використання сценарію буде слугувати ознакою того, що валідація на стороні сервера для деяких полів виконуватись не буде.

На стороні клієнта скасування валідації для потрібних полів буде виконуватись динамічно, в залежності від вибраної дії (у нашому випадку — видалення).

Наш контролер:

$NewsletterMailForm = new NewsletterMailForm();

if(Yii::$app -> request -> post($NewsletterMailForm -> formName())['event'] != NewsletterMailForm::EVENT_DELETE)
{
	$NewsletterMailForm -> scenario = NewsletterMailForm::EVENT_SEND;
}

Якщо поле "event" не дорівнює "видалити", це означає, що потрібно надсилати листи (інших дій поки не передбачено).

Наш вигляд (view):

$this -> registerJs("
	$('.btnEmailDelete').click(function(e){
		e.preventDefault();
		
		if(confirm('".Yii::t('app', 'Delete selected emails?')."'))
		{
			$('#".Html::getInputId($NewsletterMailForm, 'event')."').val('".NewsletterMailForm::EVENT_DELETE."');
			$('#form-news-letter-mail').yiiActiveForm('remove', '".Html::getInputId($NewsletterMailForm, 'subject')."');
			$('#form-news-letter-mail').yiiActiveForm('remove', '".Html::getInputId($NewsletterMailForm, 'body')."');
				
			$('#form-news-letter-mail').submit();
		}
	});
");

Трохи поясню. За замовчуванням на submit форми навішується валідація, і якщо все добре — вона надсилається на сервер. Але якщо ми натискаємо на посилання «видалити» обрані дані (у нашому випадку — email-адреси), нам потрібно якимось чином скасувати валідацію і просто відправити форму.

Більш витонченого способу я не знайшов, тому використав описаний вище.

У самій моделі реалізовано так:

if($this -> validate() == true)
{
if($this -> event == NewsletterMailForm::EVENT_DELETE)
{
/* Delete subscribers */
}
elseif($this -> event == NewsletterMailForm::EVENT_SEND)
{
/* Send list of emails */
}

return true;
}
return false;

Замість $this -> event можна було б використовувати сценарій (scenario), але поки що не перероблятиму.

Успіхів!

З вашим сайтом на фреймворку Yii2 проблеми? потрібний додатковий функціонал?
Тоді напишіть мені через форму зворотного зв'язку, і я постараюся вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *