예제 #1
0
파일: Validate.php 프로젝트: kevinwan/xf
 /**
  * 验证数据完整性 Validate
  * @access public
  * @param array $data 将要验证的数组
  * @param array $validate_rules 验证规则数组
  * @param bool $validate_all 是否同时验证所有规则
  * @param XF_Db_Table_Abstract $db_table 主要支持unique的验证,默认为null
  * @param bool $is_insert 是否为添加数据操作?如果不是,则不强制执行required
  * @return	mixed 一般返回验证后的数据[数组]
  */
 public function validateData(&$data, $validate_rules, $validate_all = false, XF_Db_Table_Abstract $db_table = NULL, $is_insert = TRUE)
 {
     if (!empty($validate_rules)) {
         //检测是否为有效的Validate
         if (!isset($validate_rules['rules'])) {
             return false;
         }
         //获取验证规则
         $rules = $validate_rules['rules'];
         //获取错误消息
         $message = $validate_rules['messages'];
         $vali_keys = array_keys($rules);
         $tmp_array = array();
         //依次对规则进行分析
         foreach ($rules as $key => $val) {
             //如果当规则字段存在
             if (isset($data[$key]) || $validate_all == true) {
                 //将规则转换为数组
                 $tmp_array = explode(',', $val);
                 foreach ($tmp_array as $index => $vals) {
                     //获取规则名称及值
                     $tep = explode(':', $vals);
                     $status = $this->_switchValidateFormData($data, $key, strtolower($tep[0]), $tep[1], $message, $db_table, $is_insert);
                     if ($status === false) {
                         //是否有设置默认值?
                         if ($defaultKey = XF_Functions::searchValueFromArray($tmp_array, 'default:')) {
                             $defaultArray = explode(':', $tmp_array[$defaultKey]);
                             if (isset($defaultArray[1]) && $defaultArray[0] == 'default') {
                                 $data[$key] = $defaultArray[1];
                                 XF_DataPool::getInstance()->replace('TableFieldDataValidateError', NULL);
                                 return $data;
                             }
                         }
                         return false;
                     }
                 }
             }
         }
     }
     return $data;
 }