2014-03-07 114 views
3

我在验证日期规则时遇到问题,当我输入无效日期(如'xxxx')时,我没有运行验证程序,但它运行了其他具有所需验证程序的字段。yii中的日期验证规则

形式

?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'post-form', 
    'enableAjaxValidation'=>false, 
    'enableClientValidation'=>true, 
)); ?> 

....

<div class="row"> 
     <?php echo $form->labelEx($model,'fromDate'); ?> 
     <?php echo $form->textField($model,'fromDate'); ?> 
     <?php echo $form->error($model,'fromDate'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'toDate'); ?> 
     <?php echo $form->textField($model,'toDate'); ?> 
     <?php echo $form->error($model,'toDate'); ?> 
    </div> 

在后模型的规则

public function rules() 
    { 
    return array(
    array('fromDate, toDate', 'date', 'format'=>'dd-mm-yyyy H:m:s', 'allowEmpty'=>false), 
      array('subject', 'required'), 
        ); 
... 

    } 

预先感谢您的帮助

回答

3

我不觉得Yii中的CDateValidator特别灵活,而且我通常是下跌的创建自定义的验证规则的路线:

添加到您的型号:

public function isValidDate($attribute, $params) 
{ 
    if(!strtotime($this->$attribute)) 
    { 
     $this->addError($attribute, $attribute . ' was not a valid date'); 
    } 
} 

然后指定自定义验证在规则的属性()数组:

array('fromDate, toDate', 'isValidDate'), 

你可以扩大,要确保日期是在合理的时间框架内,那toDate为0后等

+0

我不知道为什么isValidDate不会做任何事情! @JamesG – klark

+0

糟糕 - 错过了'!'否定断言。一个角色可以做出什么改变...现在编辑我的帖子。 – JamesG

1

您可以使用Yii的窗口小部件

<div class="row"> 
    <?php 
    echo $form->labelEx($model, 'fromDate'); 

    $this->widget('CJuiDateTimePicker', array(
     'model' => $model, //Model object 
     'attribute' => 'fromDate', //attribute name 
     'mode' => 'date', //use "time","date" or "datetime" (default) 
     'options' => array(
      'dateFormat' => "dd/mm/yy", 
      'defaultDate' => "new Date()", 
     ), // jquery plugin options 
     'htmlOptions' => array(
      'id' => 'fromDate', 
     ), 
    )); 
    ?> 

</div> 

,并在行动:

if ($model->fromDate != '') { 
    $temp = strtotime(str_replace('/', '-', $model->fromDate)); 
    $temp = date('Y-m-d', $temp); 
    $model->fromDate = $temp; 
    } 
+0

模式选项显然不存在于CJuiDateTimePicker @Rishabh – klark

+0

您可以在CJuiDateTimePicker.php中添加** public $ mode ='datetime'; ** – Rishabh