Yii Framework 2.0规则日期验证器


Yii Framework 2.0 Rules Date Validator

我使用的是Yii Framework 2.0。我有一个带有文本输入字段的表单,用于日期。我已经阅读了Yii Framework 2.0中关于类Yii''validators''Validator的内容,并了解了可以在模型类中的规则()方法内部使用的所有验证器密钥。当我使用下面的日期键时,它不会验证任何内容。这意味着我仍然可以在输入字段中输入一些文本,并可以发布表单

当我将其更改为布尔值电子邮件时,我可以看到,当我在输入字段中输入错误时,它可以很好地验证。如何使用Yii Framework 2.0验证输入字段中的日期值?

我的规则()方法:

public function rules()
{
    return [
         [['inputfield_date'], 'required'],
         [['inputfield_date'], 'safe'],
         [['inputfield_date'], 'date'],
    ];
}

我的浏览页面:

<?php $form = ActiveForm::begin(); ?>
     <?= $form->field($model, 'inputfield_date')->textInput(); ?>
<?php ActiveForm::end(); ?>

天哪,Yii的文档太糟糕了。他们甚至没有举一个例子。根据奥的回答,这对我来说很有效,因为我以2015-09-11格式分配值。

// Rule
[['event_date'], 'date', 'format' => 'php:Y-m-d']
// Assignment
$agkn->event_date = date('Y-m-d');

文档甚至没有指定formattimestampAttribute来自哪里,也没有指定如何使用它们。它甚至没有说明from_dateto_date到底是什么。最重要的是,没有例子

工作解决方案。我的规则()方法:

public function rules()
{
   return [
     [['inputfield_date'], 'required'],
     [['inputfield_date'], 'safe'],
     ['inputfield_date', 'date', 'format' => 'yyyy-M-d H:m:s'],
   ];
}

查看页面中的我的表单:

<?php $form = ActiveForm::begin(); ?>
   <?= $form->field($model, 'inputfield_date')->textInput(); ?>
<?php ActiveForm::end(); ?>

我在控制器中的方法:

if ($model->load(Yii::$app->request->post()) && $model->validate()):
        if($model->save()):
            // some other code here.....
        endif;
endif;

请注意,日期格式取决于您如何定义日期格式输入字段。再次注意,这不是AJAX验证器。单击提交按钮后,如果您输入的其他内容不是日期,您将看到错误消息。

您可以从模型规则中验证这样的日期

public function rules(){
    return [
        [['date_var'],'date', 'format'=>'d-m-yy'],
        [['from_date', 'to_date'], 'default', 'value' => null],
        [['from_date', 'to_date'], 'date'],
    ];
}

不能100%确定Yii2中的情况,但从Yii1中出来时必须是这样的。。。

array('org_datetime', 'date', 'format'=>'yyyy-M-d H:m:s'),

(来源:http://www.yiiframework.com/wiki/56/#hh8)

我想说我必须在Yii2:中看起来像这样

['shopping_date', 'date', 'format' => 'yyyy-M-d H:m:s'],

首先,日期验证依赖于$model->validate(),因此不以内联方式工作,而是仅通过单击Save来触发(即,它通常应用于actionCreate/actionUpdate)。

其次,它在其他规则(如"必需")之后应用,如果通过,则仅应用,因此即使单击"保存",如果其他任何规则未通过验证,也会显示这些错误,但不会显示日期错误。

总之,只有确保所有其他规则都通过,然后单击"保存",才能测试日期验证。