2016-05-19 42 views
1

我有三个日期,月份和年份的下拉菜单。当我应用所需的条件yii2验证显示所有三个领域的个人错误。但我想单个错误消息的三个字段,如“dob是必需的”。Yii2: - 三个字段需要一个错误消息

视图文件:

<?= $form->field($model, "month")->dropDownList([], ['class'=>'form-control day'])->label(false);?> 
<?= $form->field($model, "day")->dropDownList([], ['class'=>'form-control day'])->label(false);?> 
<?= $form->field($model, "year")->dropDownList([], ['class'=>'form-control year'])->label(false);?> 

型号:

public $day;  
public $month; 
public $year; 

[['month','day','year'], 'required', 'when' => function ($model) { 
    return (($model->month == "") || ($model->day == "") || ($model->year == "")); 
    }, 
    'whenClient' => "function (attribute, value) { 
    return ($('#user-month').val() == '' || $('#user-day').val() == '' || $('#user-year').val() == ''); 
    }",'on'=>'profile' 
] 

此代码显示了单独所有三个下拉菜单中的错误消息我。但是我想为dob提供单个错误消息:比如“dob is required”。在模式

写这样的代码:在您的行动控制器

public function rules() 
{ 
    return [ 
     [['month','day','year',],'required','on'=>['create','update'],'message' => 'Please enter DOB.'], 
     ]; 
} 

写这样的代码,你打电话给你的视图

+0

显示您的**型号代码**和** **查看我 –

+0

已经更新了我的疑问,请查看 – garima

回答

1

试试这个

$model = new YourModelName(); 
$model->scenario = "create"; 

$model = new User(); 
$model->scenario = "create"; 
+0

好像她已经使用'scenario = profile'。您的答案将为所有三个字段提供不同的验证错误,例如 - 请输入DOB,请输入DOB,请输入DOB。她只希望所有三个验证错误一次,对于前者请输入DOB – mohit

0

也许你sholud做更多的东西一样:

['month', 'validationFunction', 'skipOnEmpty' => false] 
... 
public function validationFunction($attribute, $params) { 
    if(!$this->hasErrors()) { 
     if (!$this->month || !$this->day || !$this->year) { 
      $this->addError($attribute, 'dob is required'); 
     } 
    }  
} 
+0

我使用上述功能,它不起作用。 – garima

+0

我改进了answear,它必须以这种方式工作。下次写一些比“不能工作”更多的东西。 –

相关问题