Валидация формы без модели.

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

Валидация формы без модели.

Сообщение sktx »

День добрый.
Возник такой вопрос - можно ли используя голый ActiveForm без каких-либо моделей (в т.ч и моделей форм), прикрепить к ней произвольный валидатор, например Required.
Или даже не к форме, а к отдельному инпуту. Нужна именно clientValidation.

Начал копать в сторону свойства Attributes, но что-то не до конца ясно, как сюда засунуть валидатор.
Нашел метод валидатора ClientValidateAttribute, который по идее и делает правило для клиентской валидации, но что-то дальше не вышло.

На сайте много разных инпутов, почти все нужно валидировать по разному. Большая часть даже не в формах, а служит просто для отдачи данных JSу. Писать кучу моделей форм не слишком хочется.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Валидация формы без модели.

Сообщение samdark »

ActiveForm не работает без моделей.
Аватара пользователя
Dementorpasha
Сообщения: 39
Зарегистрирован: 2013.06.08, 07:33

Re: Валидация формы без модели.

Сообщение Dementorpasha »

А почему бы тогда не воспользоваться DynamicModel ?

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

  use yii\base\DynamicModel;
  public function actionSearch($name, $email)
  {
      $model = DynamicModel::validateData(compact('name', 'email'), [
          [['name', 'email'], 'string', 'max' => 128]],
          ['email', 'email'],
      ]);
      if ($model->hasErrors()) {
          // validation fails
      } else {
          // validation succeeds
      }
  }
 
sktx
Сообщения: 9
Зарегистрирован: 2014.06.28, 00:21

Re: Валидация формы без модели.

Сообщение sktx »

Интересная штука, спасибо.
Правильно ли я понимаю что при её создании нужно обязательно задавать значение параметра?

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

    
$model = new DynamicModel(['email' => NULL]);
$model->addRule( [ 'name' , 'email' ] , 'integer' , [ 'max' => 128 ] )

$form = ActiveForm::begin() ?>
$form->field( $model , 'email' )->textInput()
В таком виде при сабмите форма обнуляется, что логично. Можно ли этого избежать, кроме как тупо вытащить из запроса параметры и присвоить свежесозданной модели?
Ответить