From c70e3297227dcb45e5de0edf633d24e2056bf84f Mon Sep 17 00:00:00 2001 From: thinkphp Date: Fri, 12 Feb 2016 12:59:38 +0800 Subject: [PATCH] =?UTF-8?q?Loader=E7=B1=BB=E7=9A=84import=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=B0=83=E6=95=B4=20Model=E7=B1=BB=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E5=92=8C=E8=87=AA=E5=8A=A8=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E6=94=B9=E8=BF=9Bcallback=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Loader.php | 6 +++--- library/think/Model.php | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/library/think/Loader.php b/library/think/Loader.php index c2c96f49..c7b7ab9a 100644 --- a/library/think/Loader.php +++ b/library/think/Loader.php @@ -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; diff --git a/library/think/Model.php b/library/think/Model.php index 8f89108f..c62819f6 100644 --- a/library/think/Model.php +++ b/library/think/Model.php @@ -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': // 行为验证