【问题标题】:(Yii)Datetime Validation fails(Yii) 日期时间验证失败
【发布时间】:2013-08-13 01:22:01
【问题描述】:

我想验证要发布的文章的日期时间表单输入。

$model = new Post('update');
    $model->attributes = $_POST['Post'];

        if($model->validate()){

            //But, validation fails...    

        }

这是我必须检查输入是否为日期时间格式的规则。 我用这个页面(http://chris-backhouse.com/date-validation-in-yii/528)作为参考。

但我收到“已创建”输入的验证错误。

public function rules()
{
    return array(

        //datetime validation
        array('created', 'date', 'message' => '{attribute}: is not a datetime!', 'format' => 'YYYY-MM-DD HH:MM:SS'),

        );
}

这就是我在 $models-attribute 中所拥有的。

array(1) { ["created"]=> string(19) "2013-08-01 00:00:01" }

有人知道怎么做吗?

提前非常感谢!!!

【问题讨论】:

    标签: php validation yii


    【解决方案1】:

    我建议在规则中使用输入格式,因为有时您需要自定义格式。

    array('created', 'date', 'format'=>'yyyy-MM-dd hh:mm:ss', 'message'=>'{attribute} have wrong format'),
    

    在此处了解有关日期格式的更多信息 - http://www.yiiframework.com/doc/api/1.1/CDateTimeParser

    【讨论】:

    • 我编写的规则和你的有什么区别?似乎是一样的。 array('created', 'date', 'message' => '{attribute}: 不是日期时间!', 'format' => 'YYYY-MM-DD HH:MM:SS'),
    • 日期验证器使用您的日期格式调用 CDateTimeParser::parse() 函数。这个函数有严格的格式,如果你不明白大写和小写的区别,我帮不了你。它具有像switch($token) { case 'yyyy': { if(($year=self::parseInteger($value,$i,4,4))===false) return false; $i+=4; break; } 这样的结构,您的YYYY 会通过它,还是在默认情况下返回false? date('d') 将返回 13,date('D') 将返回 Tue。所以下次请想想你写了什么,读了别人给你的文章。
    • 抱歉回复晚了!非常感谢您添加 cmets。虽然我还没有尝试过,但我想我现在明白如何解决我的问题了。
    【解决方案2】:

    在 Yii 2.0.6(也许是 Yii 1.x ?)上,正确的格式是:

    ['creation_date', 'date', 'format'=>'yyyy-MM-dd HH:mm:ss']
    

    如果小时数不在 CAPS 中,则它不起作用。

    【讨论】:

      【解决方案3】:

      这是帖子的创建时间吗?然后你根本不需要验证它,你应该在 beforeSave 中设置它而不是用 POST 发送它

      将此添加到您的模型中:

      public function beforeSave()
      {
        if($this->isNewRecord)
        {
           $this->created=new CDbExpression('NOW()');
        }
        return parent::beforeSave();
      }
      

      【讨论】:

      • >这是帖子的创建时间吗?不完全是。这可能是帖子计划发布的未来时间。
      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      相关资源
      最近更新 更多