Условная валидация.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Условная валидация.

Сообщение Татьна »

Мне надо в зависимости от поля поиска вводить и проверять на правильность ввода значение. Т.е, если выбран поиск по ИД, проверять поле ввода на ввод integer. Если выбран поиск по email, проверять поле ввода на ввод email.
Фрагмент view:

Код: Выделить всё

<?php echo $form->field($model, 'findtype')->radioList([
	      '1' => 'по ИД',
	      '2' => 'по Email'
	])->label('Выберите поле поиска'); ?>
	<?php echo $form->field($model, 'text')->textInput()->label('и введите значение:'); ?>
Фрагмент модели:

Код: Выделить всё

			[['text'], 'email', 'when' => function($model)
			{
				return $model->findtype == '2';
			}],
			[['text'],  'integer', 'when' => function($model)
			{
				return $model->findtype == '1';
			}],
Подскажите, пожалуйста, что я делаю не так и как надо.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Условная валидация.

Сообщение ElisDN »

У ActiveForm отключить enableClientValidation и при желании сделать ajax-валидацию.
goodfriend
Сообщения: 50
Зарегистрирован: 2018.06.02, 09:58

Re: Условная валидация.

Сообщение goodfriend »

Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

Пробовала и с when. Вот фрагмент кода:

Код: Выделить всё

			[['text'], 'email', 'when' => function($model)
			{
				return $model->findtype == '2';
			}, 'whenClient' => "function (attribute, value) {
				return $('#findtype').val() == '2';
			}"],
			[['text'],  'integer', 'when' => function($model)
			{
				return $model->findtype == '1';
			}, 'whenClient' => "function (attribute, value) {
				return $('#findtype').val() == '1';
			}"],
Но в этом случае вообще ничего не проверяется. Чтобы не вводила в поле, все разрешается.
Если убрать when, то надо обязательно вводить и число, и email. Может в ActiveForm надо что-то установить.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Условная валидация.

Сообщение ElisDN »

У инпутов формируется другие id, а не $('#findtype').
detected
Сообщения: 174
Зарегистрирован: 2017.06.16, 12:24

Re: Условная валидация.

Сообщение detected »

Я б написал скрипт, при выборе из списка выпадающего, например по Email, тогда к инпуту присваивается pattern =''
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

Не могли бы вы подробнее написать, что вы имели в виду.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Условная валидация.

Сообщение Alexum »

Татьна писал(а): 2018.06.09, 11:14 Не могли бы вы подробнее написать, что вы имели в виду.
Вам Дмитрий уже указал на проблему. Id обычных инпутов по умолчанию имеют другой вид: "#название_класса_модели-findtype".
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

На примере покажите, пожалуйста. Какой другой вид, как сформировать его, где указать.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Условная валидация.

Сообщение ElisDN »

Код: Выделить всё

'whenClient' => "function (attribute, value) {
    return $('#" . Html::getInputId($this, 'findtype') . "').val() == '2';
}"
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

Ничего не изменилось. Вот фрагмент модели с вашей подсказкой:

Код: Выделить всё

			[['text'], 'email', 'when' => function($model)
			{
				return $model->findtype == '2';
			}, 'whenClient' => "function (attribute, value) {
				return $('#".Html::getInputId($this,'findtype')."').val() == '2';
			}"],
Надо что-то изменить во view ? Вот фрагмент view:

Код: Выделить всё

			<?php $form = ActiveForm::begin([
					'id' => 'find-form',
					'enableClientValidation' => false,
				]); ?>
Что еще можно сделать ? Сделала проверку в контроллере. Но хотелось бы разобраться с проверкой в моделе.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Условная валидация.

Сообщение Alexum »

Уберите 'enableClientValidation' => false, вы же добавили скрипт валидации. И что ещё за проверка в контроллере?
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

Результат тот же. Убирай - не убирай. Нормальная проверка. Данные все известны, делаю валидацию на email, на number. Если ошибка, выдаю сообщение.
Ребят, если кто действительно разбирается, подскажите.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Условная валидация.

Сообщение mkramer »

А что в консоли браузера?
Ребят, если кто действительно разбирается, подскажите.
Да тут все, кто вам подсказывает, разбираются. Просто это надо отлаживать уметь, там тысяча причин может быть, почему браузер не запускает вашу клиентскую валидацию. Вплоть до пропущенной запятой в каком-нибудь другом совсем скрипте, к этой форме непосредственного отношения не имеющей. Много раз так было: интерпретатор js встречает где-нибудь ошибку, а потом остальной код из этого файла даже не пытается выполнять.
Последний раз редактировалось mkramer 2018.06.09, 23:35, всего редактировалось 1 раз.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Условная валидация.

Сообщение mkramer »

Хотя, я не очень люблю валидацию на клиенте. Видимо потому, что мои проекты не супер нагруженные, и лишний раз дёрнуть сервер для меня не проблема.
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

Я тоже не хотела бы делать валидацию на клиенте. Те, кто к вам обращается не супер программисты на yii, многие начинающие, поэтому, обращаясь к вам, ждут развернутого объяснения. Я не имею в виду написать код. Я, по-моему, привела всю необходимую информацию. Если необходимо, я могу еще привести. Пока результата нет. Что и как посмотреть в консоли браузера.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Условная валидация.

Сообщение mkramer »

Дело в том, что начинающий программист не должен программировать на Yii, он должен сначала посидеть на элементарных проектах. На Yii (и любой другой фреймворк) надо приходить с всеобъемлющим знанием PHP + JavaScript.

Консоль браузера - отладочный инструмент, предоставляемый современными браузерами, обычно по клавише f12 на PC. http://prntscr.com/jt2ds3
Я тоже не хотела бы делать валидацию на клиенте.
А зачем тогда с ней мучаетесь? whenClient - валидация на клиенте.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Условная валидация.

Сообщение mkramer »

Кстати, у браузера прекрасный отладчик, можно пройтись по скриптам самой Yii им, я постоянно так делаю. Находится там же, вкладка Sources, находите скрипт, находите нужную точку - и смотрите. Тех строчек, что вы привели, не достаточно, чтоб однозначно сказать, почему клиентская валидация не происходит.
Татьна
Сообщения: 96
Зарегистрирован: 2018.04.22, 00:17

Re: Условная валидация.

Сообщение Татьна »

Короче, спасибо. Есть на форуме несколько человек, которые мне действительно помогли, не спрашивая начинающий ли я программист. В этот раз разберусь сама.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Условная валидация.

Сообщение urichalex »

Предсказуемо)
Татьяна, если что-то не работает на клиенте - первым делом нужно смотреть консоль браузера на предмет ошибок. А вторым делом - есть ли вообще тот код, который вы запускаете на клиенте
Ответить