當空

2013-10-14 56 views
1

我要瘋了一個相當簡單的問題當空

我已經字面上數百日期被存儲在我的應用程序的網絡嘗試了不同的解決方案,我的客戶端的源數據具有CDateValidator一套空日期的不良習慣是不同的格式。

例如,我的一個模型都有規則遵循(完成所有列出了該具體型號)

public function rules() { 
     return array(
      array('function, junior, ces,agreement_expected,start_date', 'required'), 
      array('start_budget', 'numerical'), 
      array('visa_received,training_days', 'numerical', 'integerOnly' => true), 
      array('function, junior, ces,currency', 'length', 'max' => 10), 
      array('agreement_received, status, stop_date_original, stop_date_extended', 'safe'), 
      array('agreement_received, visa_received, stop_date_original, stop_date_extended', 'default', 'setOnEmpty' => true, 'value' => null), 
      array('agreement_received,agreement_expected,start_date,stop_date_original,stop_date_extended', 'date', 'format' => 'Y-m-d', 'allowEmpty' => true), 
      array('id, Sname,PFces, PFdomain,PDkeyword, PFstatus, PRname,PRcountry,PRscore,PRcomment,PRngo,TRname,TRpic, TFfunction, TFx, TRdateofbirth,TRedufields,TRcoach,TRlocation,TRtask,TRcontract,TRproject,TRcontact,TFdateofbirth,TFedufields,TFcoach,TFlocation,TFtask,TFcontract,TFproject,TFcontact, 
date1,date2,idate, ddomains,dkeywords,country,agreement, function,ngo, status,group, junior, junior_lastname, junior_firstname,search_all,search_interrupt, ces, agreement_expected, agreement_received, visa_received, start_date, stop_date_original, stop_date_extended,currency, start_budget, training_days', 'safe', 'on' => 'search'), 
     ); 
    } 

我要實現的是通過以下規則

 array('agreement_received, visa_received, stop_date_original, stop_date_extended', 'default', 'setOnEmpty' => true, 'value' => null), 
     array('agreement_received,agreement_expected,start_date,stop_date_original,stop_date_extended', 'date', 'format' => 'Y-m-d', 'allowEmpty' => true), 

描繪的是什麼當我有一個表單,並提交一個空值,說停止日期擴展,它不是設置爲空,而是一個空字符串..

我做錯了什麼? 當然,由於不使用日期驗證程序可以很好地解決問題,所以必須有一個簡單的解決方法。

回答

1

Yii的默認驗證類處理這樣的空值:

/框架/驗證/ CDefaultValueValidator.php

protected function validateAttribute($object,$attribute) 
{ 
    if(!$this->setOnEmpty) 
     $object->$attribute=$this->value; 
    else 
    { 
     $value=$object->$attribute; 
     if($value===null || $value==='') 
      $object->$attribute=$this->value; 
    } 
} 

鑑於上述的唯一問題的功能可能是值[即$值]張貼由形式可能是不是空字符串大概是it might have spaces。可能您可以在將值分配給模型屬性之前嘗試修剪()值。或延長默認值驗證e.g

class CMyDefaultValueValidator extends CDefaultValueValidator 
{  
    protected function validateAttribute($object,$attribute) 
    { 
     if(!$this->setOnEmpty) 
      $object->$attribute=$this->value; 
     else 
     { 
      $value=trim($object->$attribute); 
      if($value===null || $value==='') 
       $object->$attribute=$this->value; 
     } 
    } 
} 

剛剛記下的行:$值=修剪($對象 - > $屬性);

雖然,我沒有測試過上面的代碼,我不知道這是否可以做一些更好的方法,

0

如果要插入空爲空字符串,你可以做你的模型,驗證後:

public function afterValidate() 
{ 
    if(empty(trim($this->yourField))) // put whatever logic that you need 
     $this->yourField = null; 

    return parent::afterValidation(); 
}