From b1f4cad00bd4cf943a920d908d5a451c61a68f8d Mon Sep 17 00:00:00 2001 From: thinkphp Date: Thu, 10 Dec 2015 17:37:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9Bhook=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/hook.php | 46 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/library/think/hook.php b/library/think/hook.php index ceed170a..ab389181 100644 --- a/library/think/hook.php +++ b/library/think/hook.php @@ -24,6 +24,9 @@ class Hook */ public static function add($tag, $behavior) { + if (!isset(self::$tags[$tag])) { + self::$tags[$tag] = []; + } if (is_array($behavior)) { self::$tags[$tag] = array_merge(self::$tags[$tag], $behavior); } else { @@ -32,13 +35,48 @@ class Hook } /** - * 批量导入行为 - * @param array $tags 标签行为 + * 批量导入插件 + * @param array $data 插件信息 + * @param boolean $recursive 是否递归合并 * @return void */ - public static function import($tags) + public static function import($tags, $recursive = true) { - self::$tags = array_merge(self::$tags, $tags); + if (!$recursive) { + // 覆盖导入 + self::$tags = array_merge(self::$tags, $tags); + } else { + // 合并导入 + foreach ($tags as $tag => $val) { + if (!isset(self::$tags[$tag])) { + self::$tags[$tag] = []; + } + + if (!empty($val['_overlay'])) { + // 可以针对某个标签指定覆盖模式 + unset($val['_overlay']); + self::$tags[$tag] = $val; + } else { + // 合并模式 + self::$tags[$tag] = array_merge(self::$tags[$tag], $val); + } + } + } + } + + /** + * 获取插件信息 + * @param string $tag 插件位置 留空获取全部 + * @return array + */ + public static function get($tag = '') + { + if (empty($tag)) { + // 获取全部的插件信息 + return self::$tags; + } else { + return self::$tags[$tag]; + } } /**