我的yii2项目中有一个向导表单。我的表单是yii2活动表单的类型。
现在我想分别验证每个部分。例如,向导的第一部分包括t1
,t2
,t3
,第二部分包括t4
,t5
。当用户点击第1部分的下一步按钮时,我只想验证t1
,t2
和t3
,但不是t4
和t5
。我应该如何在yii2中做到这一点?
修改
请注意我想使用yii2验证器,并且不想再次在我的jquery代码中编写验证规则。
修改:请检查代码
$wizard_config = [
'id' => 'stepwizard',
'steps' => [
1 => [
'title' => 'اطلاعات پروژه',
'icon' => 'fa fa-info',
'content' =>
$form->field($model, 'title') .
$form->field($model, 'language_id')->dropDownList($language, ['style' => 'padding-top: 0;', 'prompt' => 'زبان']) .
$form->field($model, 'project_type_id')->dropDownList($project_type, ['style' => 'padding-top: 0;']) .
$form->field($model, 'text_type_id')->dropDownList($text_type, ['style' => 'padding-top: 0;']) .
$form->field($model, 'description')->textarea(['style'=>'height: 140px;resize:none;'])
,
],
2 => [
'title' => 'فایل های پروژه',
'icon' => 'fa fa-upload',
'content' =>
$form->field($model, 'proj_file')->fileInput() .
$form->field($model, 'pages') .
$form->field($model, 'template')->fileInput()
,
],
3 => [
'title' => 'زمان و قیمت',
'icon' => 'fa fa-clock-o',
'content' =>
$form->field($model, 'deadline_day') .
$form->field($model, 'deadline_time') .
$form->field($model, 'doing_way_id') .
$form->field($model, 'user_id') .
$form->field($model, 'pawn_money') .
$form->field($model, 'is_group')
,
],
4 => [
'title' => 'تایید',
'icon' => 'fa fa-check',
'content' => '<h3>Step 3</h3>This is step 3',
],
],
'start_step' => 1,
];
答案 0 :(得分:2)
您可以针对不同的方案分离模型中的步骤。
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['step1'] = ['login', 'username'];
$scenarios['step2'] = ['t1', t2];
return $scenarios;
}
然后在每个步骤中为模型分配方案
$user->scenario = 'step1';
并仅验证模型属性的一部分。你必须编写ajax动作,它可以映射步骤和场景并返回验证结果。
答案 1 :(得分:1)
这是解决方案。非常感谢Amin Cheloh
和Alexander Makarov
提供this文章。
用于验证表单的一个输入。我们应该使用这一行代码。
$('#id-of-form').yiiActiveForm('validateAttribute', 'input id');