Как включить выключить проверку формы интерфейса для некоторых полей в yii2?

У меня сложная форма в представлении yii2, где некоторые поля показывают или скрывают. Он решает от выбора поля пользователя, выберите Параметры в форме. Я пишу эту логику интерфейса с помощью пользовательского файла jquery. Все в порядке. Но когда я отправляю форму-скрытые поля остаются без проверки, и ничего не происходит.Как я могу убить проверку ofrontend, когда поля hiiden и включить его, когда поля видны?

5 ответов


отключить проверку на стороне клиента. Начните свою активную форму вот так.

ActiveForm::begin(['enableClientValidation'=>false]);

$form->field($model, 'youAttribute', ['enableClientValidation' => false])->textInput();

на ActiveField класс имеет свойство enableClientValidation, вы можете просто установить это свойство в false Если вы хотите отключить clientValidation формируют некоторые поля.


вы можете установить активное поле, используя этот код: (не active record, activefield точно)

$activeField = $form->field($model, 'someField');
$activeField->enableClientValidation=false;
$activeField ->enableAjaxValidation=false;

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

[
  // set "username" and "email" as null if they are empty
  [['username', 'email'], 'default'],

  // set "level" to be 1 if it is empty
  ['level', 'default', 'value' => 1],
]

подробнее здесь

вы также можете использовать условное проверка на стороне клиента С "whenClient" опция при определении валидаторов:

из руководства:

Если вам нужна поддержка условной проверки на стороне клиента, вы следует настроить whenClient свойство, которое принимает строку представление JavaScript функция, возвращаемое значение которой определяет применять правило или нет. Например,

[
    ['state', 'required', 'when' => function ($model) {
        return $model->country == 'USA';
    }, 'whenClient' => "function (attribute, value) {
        return $('#country').val() == 'USA';
    }"],
]

удалить поле из проверки:

$('#yourFormID').yiiActiveForm('remove', 'yourinputID');

чтобы добавить поле в список проверки:

$('#yourFormID').yiiActiveForm('add', {
id: 'country',
        name: 'yourinputID',
        container: '.field-inputID', //or your cllass container
        input: '#yourinputID',
        error: '.help-block',  //or your class error
        validate:  function (attribute, value, messages, deferred, $form) {
            yii.validation.required(value, messages, {message: "Validation Message Here"});
        }
    }); 

и не забывайте об условной проверке в вашей модели. Подробнее