class User extends ActiveRecord
{
public $var1;
const SCENARIO_VAR1 = 'var1';
public function rules()
{
return [
[['var1', 'var2'], 'required', 'on' => self::SCENARIO_VAR1],
];
}
}
</cod>
В форме, к примеру, 2 поля
<code lang="php">
<?php $form = ActiveForm::begin([
'id'=>'form-three',
'action' => '/site/save',
'validationUrl' => '/site/validate',
'enableAjaxValidation'=>true,
'validateOnChange'=>false,
'validateOnBlur'=>false,
]) ?>
<?= $form->field($user, 'var1')->widget(Select2::classname(), [
'data'=>ArrayHelper::map(ArrVar1::find()->orderBy('name')->all(), 'id', 'name'),
'size'=>'lg',
'options'=>[
'class'=>'form-control input-lg',
'placeholder'=>'Выберите варианты 1',
'multiple'=>true,
],
])->label(false)
?>
<?= $form->field($user, 'var2')->textInput(['placeholder'=>'Введите вариант 2', 'class'=>'form-control input-lg'])->label(false) ?>
</code>
Действие валидации
<code lang="php">
public function actionValidate()
{
$cookies = Yii::$app->request->cookies;
$model_user = User::findByEmail($cookies->getValue('email', null));
$model_user->scenario = User::SCENARIO_VAR1;
if (Yii::$app->request->isAjax && $model_user->load(Yii::$app->request->post())) {
\Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model_user);
}
}
</code>
Если поля не заполнены, после отправки формы аяксом в экшн валидации в респонсе прилетают обе! ошибки, но в форме отображаются только var2. Если убрать сценарий то все отображается нормально. Не могу понять почему, есть у кого какие мысли?
ну регистрация в два этапа=) В модальном окне заполняешь фио и прочую лабуду, затем нажимаешь далее, открывается вкладка где надо еще заполнить доп информацию, специальность стаж работы например.
class User extends ActiveRecord
{
const SCENARIO_LOGIN = 'login';
const SCENARIO_REGISTER = 'register';
public function scenarios()
{
return [
self::SCENARIO_LOGIN => ['username', 'password'],
self::SCENARIO_REGISTER => ['username', 'email', 'password'],
];
}
}
['var1', 'safe']
Ошибка в форме отображается, почему так работает я так и не понял. Вычитал, что к свойствам надо обращаться через attributes, возможно в этом собака зарыта, так как после валидации делаю вардамп модели и там нет атрибута var1 а только поля таблицы бд. Но копать в эту сторону не стал так как времени нет.