Loader类的import方法调整 Model类自动验证和自动完成改进callback类型

This commit is contained in:
thinkphp
2016-02-12 12:59:38 +08:00
parent 09486f2156
commit c70e329722
2 changed files with 19 additions and 5 deletions

View File

@@ -211,13 +211,13 @@ class Loader
} elseif ('@' == $name || MODULE_NAME == $name) {
//加载当前模块应用类库
$baseUrl = MODULE_PATH;
} elseif (in_array($name, ['traits', 'think', 'behavior']) || is_dir(LIB_PATH . $name)) {
} elseif (in_array($name, ['traits', 'think', 'behavior'])) {
$baseUrl = LIB_PATH;
} elseif (is_dir(EXTEND_PATH . $name)) {
$baseUrl = EXTEND_PATH;
} elseif (APP_NAMESPACE == $name) {
// 项目命名空间
$baseUrl = APP_PATH;
} elseif (is_dir(EXTEND_PATH . $name)) {
$baseUrl = EXTEND_PATH;
} else {
// 加载其他模块应用类库
$baseUrl = APP_PATH . $name . DS;

View File

@@ -1068,12 +1068,19 @@ class Model
} else {
$rule = isset($val[0]) ? $val[0] : $val;
$type = isset($val[1]) ? $val[1] : 'value';
if ($rule instanceof \Closure) {
$type = 'callback';
}
switch ($type) {
case 'behavior':
Hook::exec($rule, '', $data);
break;
case 'callback':
$data[$key] = call_user_func_array($rule, [$value, &$data]);
if (is_array($rule) || (is_string($rule) && strpos($rule, '::'))) {
$data[$key] = App::invokeMethod($rule, [$value, &$data]);
} else {
$data[$key] = App::invokeFunction($rule, [$value, &$data]);
}
break;
case 'ignore':
if ($rule === $value) {
@@ -1103,9 +1110,16 @@ class Model
$msg = isset($val[1]) ? $val[1] : 'data validate error : [ ' . $key . ' ]';
$type = isset($val[2]) ? $val[2] : 'regex';
$options = isset($val[3]) ? $val[3] : [];
if ($rule instanceof \Closure) {
$type = 'callback';
}
switch ($type) {
case 'callback':
$result = call_user_func_array($rule, [$value, &$data]);
if (is_array($rule) || (is_string($rule) && strpos($rule, '::'))) {
$result = App::invokeMethod($rule, [$value, &$data]);
} else {
$result = App::invokeFunction($rule, [$value, &$data]);
}
break;
case 'behavior':
// 行为验证