2017-07-03 51 views
0

在我的模型我用DateValidation如何爲DateValidation添加錯誤消息?

['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, 
         ] 
        ]) ?> 

它檢查最小和最大日期,但沒有顯示錯誤消息。我認爲它是因爲模型和視圖中的日期格式不同。如何解決它?

+0

你怎麼知道它檢查最小和最大日期? –

+0

當我輸入日期超出範圍它不保存 – Jens

回答

1

如果您提交表單,您將看到錯誤消息。根據這個問題https://github.com/yiisoft/yii2/issues/7745 yii2沒有客戶端驗證日期

您可以啓用ajax驗證。在語句前加入創建和更新動作

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和結束日期(https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#startdate

<?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'), 
        ] 
       ]) ?> 
+0

正確比較您可以使用其他格式,如Y-m-d。 Yii與簡單的'<' and '>'[DateValidator.php](https://github.com/yiisoft/yii2/blob/master/framework/validators/DateValidator.php#L266)比較日期。您可以覆蓋此行爲或在驗證事件之前和之後使用日期的更改格式 – Pahanium

相關問題