Как подключить стандартную JS валидацию?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Как подключить стандартную JS валидацию?

Сообщение Dark Gard »

В примерах везде используется экземпляр объекта yii\widgets\ActiveForm для генерации html элементов для ввода данных пользователем.

Например у нас есть модель

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

class ModelForm extends \yii\base\Model
{
	public $weight;
	
	public function rules()
        {
            return [
                 [['weight',], 'integer', 'min'=>0, 'message' => 'Значение должно быть целым числом с точностью до килограмма'],
                 [['weight',], 'required']
            ];
        }
}

Соответственно в представлении используем:

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

use yii\helpers\Html;
use yii\widgets\ActiveForm;

$form = ActiveForm::begin();
echo $form->field($model, 'weight')->textInput(['maxlength' => true]);
echo Html::submitButton('Применить', ['class' => 'btn btn-primary']);
ActiveForm::end();
Но как быть есть содержимое формы я подгружаю через ajax, где получаю содержимое с использованием:

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

....

$fieldName = strtolower('field-'.$model->formName());
echo Html::tag('div',
                Html::activeInput('text', $model, 'weight', [
                    'class' => 'form-control',
                    'maxlength' => true,
                    ]).
                Html::error($model,  'weight' , ['class' => 'help-block']),
                ['class' => 'form-group '.$fieldName.'-weight']);
в данном случае я использовать yii\widgets\ActiveForm не могу и полученное поле ввода не валидируется стандартным образом. писать стандартные JS скрипты не хочется. Как быть?
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Как подключить стандартную JS валидацию?

Сообщение masson »

https://www.yiiframework.com/doc/guide/ ... validation
3-ий параграф, не ваш случай?
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: Как подключить стандартную JS валидацию?

Сообщение Dark Gard »

Нет. Опция whenClient нужна для формирования не стандартных правил JS валидации. Указанные в ней JS правила буду добавлены yii\widgets\ActiveForm на страницу и будут обработаны перед submit-ом формы.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Как подключить стандартную JS валидацию?

Сообщение maleks »

Можете аяксом возвращать данные, а поле уже добавлять как тут сказано
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: Как подключить стандартную JS валидацию?

Сообщение Dark Gard »

maleks писал(а): 2018.08.22, 08:59 Можете аяксом возвращать данные, а поле уже добавлять как тут сказано
Спасибо. Однако хотелось бы использовать код ядра yii. методы класса yii\widgets\ActiveField формируют необходимые JS для валидации, но он подразумевает принадлежность к объекту формы yii\widgets\ActiveForm.

Сделал свой реализацию ActiveForm путем копи паста фрагментов yii\widgets\ActiveForm, а именно определил все свойства что и в оригинале, перенес методы field(), getClientOptions() как есть, а метод registerClientScript() переопределил по указанной ссылке. получилось что-то вроде:

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

    public function registerClientScript()
    {
        $id = $this->options['id'];
        $view = $this->getView();
        foreach ($this->attributes as $options) {
            $options = Json::htmlEncode($options);
            $view->registerJs("jQuery('#$id').yiiActiveForm('add', $options);", \yii\web\View::POS_HEAD);
        }
    }

Ответ ajax формирую уже посредством вызова метода field() моего класса, а в конце дополнительно вызываю registerClientScript().
Закрыто