修正model类

This commit is contained in:
thinkphp
2016-02-18 18:17:55 +08:00
parent 58e57e1581
commit c364b91ff5

View File

@@ -996,7 +996,7 @@ class Model
$options['value_validate'] = isset($options['value_validate']) ? $options['value_validate'] : []; $options['value_validate'] = isset($options['value_validate']) ? $options['value_validate'] : [];
$options['exists_validate'] = isset($options['exists_validate']) ? $options['exists_validate'] : []; $options['exists_validate'] = isset($options['exists_validate']) ? $options['exists_validate'] : [];
foreach ($rules as $key => $val) { foreach ($rules as $key => $val) {
if (is_numeric($key)) { if (is_numeric($key) && is_array($val)) {
$key = array_shift($val); $key = array_shift($val);
} }
if (!empty($scene) && !in_array($key, $scene)) { if (!empty($scene) && !in_array($key, $scene)) {
@@ -1051,7 +1051,7 @@ class Model
$options['value_fill'] = isset($options['value_fill']) ? $options['value_fill'] : []; $options['value_fill'] = isset($options['value_fill']) ? $options['value_fill'] : [];
$options['exists_fill'] = isset($options['exists_fill']) ? $options['exists_fill'] : []; $options['exists_fill'] = isset($options['exists_fill']) ? $options['exists_fill'] : [];
foreach ($rules as $key => $val) { foreach ($rules as $key => $val) {
if (is_numeric($key)) { if (is_numeric($key) && is_array($val)) {
$key = array_shift($val); $key = array_shift($val);
} }
if (!empty($scene) && !in_array($key, $scene)) { if (!empty($scene) && !in_array($key, $scene)) {
@@ -1129,13 +1129,12 @@ class Model
} }
if ($val instanceof \Closure) { if ($val instanceof \Closure) {
$result = call_user_func_array($val, [$value, &$data]); $result = call_user_func_array($val, [$value, &$data]);
} elseif (isset($val[0]) && $val[0] instanceof \Closure) {
$result = call_user_func_array($rule, [$value, &$data]);
} else { } else {
$rule = isset($val[0]) ? $val[0] : $val; $rule = isset($val[0]) ? $val[0] : $val;
$type = isset($val[1]) ? $val[1] : 'value'; $type = isset($val[1]) ? $val[1] : 'value';
$params = isset($val[2]) ? $val[2] : []; $params = isset($val[2]) ? $val[2] : [];
if ($rule instanceof \Closure) {
$type = 'callback';
}
switch ($type) { switch ($type) {
case 'behavior': case 'behavior':
Hook::exec($rule, '', $data); Hook::exec($rule, '', $data);
@@ -1181,8 +1180,9 @@ class Model
$type = isset($val[2]) ? $val[2] : 'regex'; $type = isset($val[2]) ? $val[2] : 'regex';
$options = isset($val[3]) ? $val[3] : []; $options = isset($val[3]) ? $val[3] : [];
if ($rule instanceof \Closure) { if ($rule instanceof \Closure) {
$type = 'callback'; // 匿名函数验证 支持传入当前字段和所有字段两个数据
} $result = call_user_func_array($rule, [$value, &$data]);
} else {
switch ($type) { switch ($type) {
case 'callback': case 'callback':
array_unshift($options, $value); array_unshift($options, $value);
@@ -1219,6 +1219,7 @@ class Model
$result = 1 === preg_match('/^' . $rule . '$/', (string) $value); $result = 1 === preg_match('/^' . $rule . '$/', (string) $value);
break; break;
} }
}
// 验证失败返回错误信息 // 验证失败返回错误信息
return (is_array($result) || true === $result) ? $result : $msg; return (is_array($result) || true === $result) ? $result : $msg;
} }