Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2 如何为日期验证添加错误消息?_Yii2 - Fatal编程技术网

Yii2 如何为日期验证添加错误消息?

Yii2 如何为日期验证添加错误消息?,yii2,Yii2,在我的模型中,我使用日期验证 ['date_birthday', 'date', 'format' => 'd.m.yy', 'min' => '01.01.1900', 'max' => date('d.m.yy'), 'tooSmall'=>'The date is from past. Try another','tooBig' => 'The date is from future. Try another', 'message' => 'Try to

在我的模型中,我使用日期验证

['date_birthday', 'date', 'format' => 'd.m.yy', 'min' => '01.01.1900', 'max' => date('d.m.yy'), 'tooSmall'=>'The date is from past. Try another','tooBig' => 'The date is from future. Try another', 'message' => 'Try to input the date'],
在视图中,我调用小部件

 <?php echo $form->field($modelForm, 'date_birthday')->widget(\kartik\date\DatePicker::classname(), [
                        'type' => \kartik\date\DatePicker::TYPE_COMPONENT_APPEND,
                        'pickerButton' => false,
                        'options' => [
                            'placeholder' => '',
                        ],
                        'pluginOptions' => [
                            'format' => 'dd.mm.yyyy',
                            'autoclose' => true,
                            'showMeridian' => true,
                            'startView' => 2,
                            'minView' => 2,
                        ]
                    ]) ?>

它检查最小和最大日期,但不显示错误消息。我认为这是因为模型和视图中的日期格式不同。如何修复它?

如果您提交表单,您将看到错误消息。根据这个问题,yii2没有客户端验证的日期

您可以启用ajax验证。if语句之前的外接程序创建和更新操作

if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    Yii::$app->response->format = yii\web\Response::FORMAT_JSON;
    return ActiveForm::validate($model);
}
并添加使用yii\widgets\ActiveForm;在控制器类的顶部。在_form.php文件中,为整个表单启用ajax

<?php $form = ActiveForm::begin([
    'enableAjaxValidation' => true,
]); ?>
,或仅适用于现场

<?php echo $form->field($model, 'date_birthday', ['enableAjaxValidation' => true])->widget(\kartik\date\DatePicker::classname(), [
...
此外,您还可以使用startDate和endDate为限制日期添加插件选项


你怎么知道它会检查最小和最大日期?当我输入的日期超出范围时,它不会保存以进行正确比较,你可以使用其他格式,如Y-m-d。我比较日期和简单。您可以覆盖此行为,或使用“验证事件之前”和“验证事件之后”更改日期格式
 <?php echo $form->field($model, 'date_birthday', ['enableAjaxValidation' => true])->widget(\kartik\date\DatePicker::classname(), [
                    'type' => \kartik\date\DatePicker::TYPE_COMPONENT_APPEND,
                    'pickerButton' => false,
                    'options' => [
                        'placeholder' => '',
                    ],
                    'pluginOptions' => [
                        'format' => 'dd.mm.yyyy',
                        'autoclose' => true,
                        'showMeridian' => true,
                        'startView' => 2,
                        'minView' => 2,
                        'startDate' => '01.01.1900',
                        'endDate' => date('d.m.Y'),
                    ]
                ]) ?>