// +---------------------------------------------------------------------- namespace service; use think\Exception; use think\Hook; use think\Loader; class HookService { /** * 监听有返回结果的行为 * @param $tag * @param $params * @param null $extra * @param bool $once * @return mixed */ public static function resultListen($tag, $params, $extra = null, $once = false, $behavior = null) { self::beforeListen($tag, $params, $extra, false, $behavior); return self::listen($tag, $params, $extra, $once, $behavior); } /** * 监听后置行为 * @param $tag * @param $params * @param null $extra */ public static function afterListen($tag, $params, $extra = null, $once = false, $behavior = null) { try { return self::listen($tag . '_after', $params, $extra, $once, $behavior); } catch (\Exception $e) { } } public static function beforeListen($tag, $params, $extra = null, $once = false, $behavior = null) { try { return self::listen($tag . '_before', $params, $extra, $once, $behavior); } catch (\Exception $e) { } } /** * 监听行为 * @param $tag * @param $params * @param null $extra * @param bool $once * @return mixed */ public static function listen($tag, $params, $extra = null, $once = false, $behavior = null) { if ($behavior && method_exists($behavior, Loader::parseName($tag, 1, false))) self::add($tag, $behavior); return Hook::listen($tag, $params, $extra, $once); } /** * 添加前置行为 * @param $tag * @param $behavior * @param bool $first */ public static function addBefore($tag, $behavior, $first = false) { self::add($tag . '_before', $behavior, $first); } /** * 添加后置行为 * @param $tag * @param $behavior * @param bool $first */ public static function addAfter($tag, $behavior, $first = false) { self::add($tag . '_after', $behavior, $first); } /** * 添加行为 * @param $tag * @param $behavior * @param bool $first */ public static function add($tag, $behavior, $first = false) { Hook::add($tag, $behavior, $first); } }