Валидация поля формы по условию

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Валидация поля формы по условию

Сообщение Quieteroks »

Здравствуйте.

Подскажите пожалуйста, можно ли организовать такую проверку:
Поле с данным по Отчеству является обязательным, но его может не быть, о чем пользователь должен поставить галочку.

Есть ли возможность отключить поле отчества, если галочка стоит?

Пока реализовал через встроенный фильтр модели, но буду писать скорее всего свой валидатор, что бы это же делать на стороне клиента.
Вот только со своим валидатор пока проблема, он ведь должен использовать встроенные правила валидации, а сам валидатор является лишь прослойкой с динамической моделью...

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

public function validateMiddleName($attribute, $params)
{
    if(!$this->middle_empty) {
        $model = DynamicModel::validateData([$attribute => $this->$attribute], [
            [$attribute, 'match', 'pattern' => '/[а-яА-ЯёЁ]+$/s', 'message' => $params['message'],
            [$attribute, 'string', 'max' => 32]
        ]);
        if($model->hasErrors()) {
            $this->addErrors($model->getErrors());
        }
    } elseif(empty($this->$attribute)) {
        $this->addError($attribute, Yii::$app->getI18n()
            ->format($params['empty'], [
                'attribute' => $this->getAttributeLabel($attribute)
            ], Yii::$app->language));
    }
}
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Re: Валидация поля формы по условию

Сообщение Quieteroks »

Совсем забыл про это... Спасибо!

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

Re: Валидация поля формы по условию

Сообщение ElisDN »

Взять тот id, который сгенерировался.
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Re: Валидация поля формы по условию

Сообщение Quieteroks »

ElisDN писал(а):Взять тот id, который сгенерировался.
А можно подробнее? Я даже примерно представить себе не могу, как взять в контроллере или модели ID из формы, которая генерируется во вьюхе... Тем более в анонимной функции для фильтра.

Или Вы имеете ввиду взять из сгенерированного html и вставить в код строку?
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Re: Валидация поля формы по условию

Сообщение Quieteroks »

Покопался в исходниках ActiveField и нашел возможность передать для поля конкретный id для поля.

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

<?= $form->field($model, 'middle_name')->input('text', ['id' => 'id_middle_name']) ?>
Но мне кажется в данном случае это все же обходной вариант, а не универсальный.
А получить id сгенерированный для поля можно только после его генерации, как я и думал.
Динамически это возможно?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Валидация поля формы по условию

Сообщение ElisDN »

Quieteroks писал(а):Покопался в исходниках ActiveField и нашел возможность передать для поля конкретный id для поля.
А зачем Вам нужно ID поля менять?
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Re: Валидация поля формы по условию

Сообщение Quieteroks »

ElisDN писал(а):
Quieteroks писал(а):Покопался в исходниках ActiveField и нашел возможность передать для поля конкретный id для поля.
А зачем Вам нужно ID поля менять?
Что бы знать к какому полю обращаться из js для валидации.
Или просто взять id из сгенерированной формы? Но ведь в любой момент ту же форму можно переименовать и опять лезть менять в валидаторе id нового (по сути) поля.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Валидация поля формы по условию

Сообщение ElisDN »

Quieteroks писал(а):Или просто взять id из сгенерированной формы?
Да. Открыть исходный код страницы и взять тот id, который сгенерировался у нужного input.
Quieteroks писал(а):Но ведь в любой момент ту же форму можно переименовать и опять лезть менять в валидаторе id нового (по сути) поля.
Имя поля генерируется из имени класса и имени атрибута. Если переименуете класс модели, то и замените имя.
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Re: Валидация поля формы по условию

Сообщение Quieteroks »

ElisDN писал(а):Имя поля генерируется из имени класса и имени атрибута. Если переименуете класс модели, то и замените имя.
Спасибо. Понял. Я думал она от id формы берется. Куда-то не туда смотрел.
Vic
Сообщения: 109
Зарегистрирован: 2010.03.12, 01:55

Re: Валидация поля формы по условию

Сообщение Vic »

Html::getInputId ( $model, $attribute )
Quieteroks
Сообщения: 15
Зарегистрирован: 2016.02.25, 12:29

Re: Валидация поля формы по условию

Сообщение Quieteroks »

Vic писал(а):Html::getInputId ( $model, $attribute )
Благодаря Вашему ответу получилось сделать универсальный валидатор.
Если кого-нибудь он интересует, могу куда-нибудь выложить.

Валидатор проверяет поле на стороне клиента и в модели.
Проверка реагирует на чекбокс об отметке, что поле является пустым.
Писалось под поле с Отчеством. Не все национальности имеют отчество и для них это поле является не обязательным, если это явно указано.
Ответить