我使用的是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');
文档甚至没有指定format
或timestampAttribute
来自哪里,也没有指定如何使用它们。它甚至没有说明from_date
和to_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)。
其次,它在其他规则(如"必需")之后应用,如果通过,则仅应用,因此即使单击"保存",如果其他任何规则未通过验证,也会显示这些错误,但不会显示日期错误。
总之,只有确保所有其他规则都通过,然后单击"保存",才能测试日期验证。