• thinkphp5 速查表


    本速查表里的类都是think为命名空间的,实例化时省去了  use。用的时候注意。

    本速查表里会有四种方法的调用:

        公有方法 $class = new Class();  $class->foo();

        公有静态 Class::foo();

        私有方法 $this->foo();

        私有静态 self::foo();

    关于注释,为了简洁,/** 的单行注释被我改为了 // 


    App

    // 执行应用程序
    App::run(Request $request = null);
    
    // 设置当前请求的调度信息
    App::dispatch($dispatch, $type = 'module');
    
    // 执行函数或者闭包方法 支持参数调用
    App::invokeFunction($function, $vars = []);
    
    // 调用反射执行类的方法 支持参数绑定
    App::invokeMethod($method, $vars = []);
    
    // 调用反射执行类的实例化 支持依赖注入
    App::invokeClass($class, $vars = []);
    
    // 绑定参数
    App::bindParams($reflect, $vars = []);
    
    // 执行模块
    App::module($result, $config, $convert = null);
    
    // 初始化应用
    App::initCommon();
    
    // 初始化应用或模块
    App::init($module = '');
    
    // URL路由检测(根据PATH_INFO)
    App::routeCheck($request, array $config);
    
    // 设置应用的路由检测机制
    App::route($route, $must = false);

    Build

    // 根据传入的build资料创建目录和文件
    Build::run(array $build = [], $namespace = 'app', $suffix = false);
    
    // 创建目录
    Build::buildDir($list);
    
    // 创建文件
    Build::buildFile($list);
    
    // 创建模块
    Build::module($module = '', $list = [], $namespace = 'app', $suffix = false);
    
    // 创建模块的欢迎页面
    Build::buildHello($module, $namespace, $suffix = false);
    
    // 创建模块的公共文件
    Build::buildCommon($module);

    Cache

    // 连接缓存
    Cache::connect(array $options = [], $name = false);
    
    // 自动初始化缓存
    Cache::init(array $options = []);
    
    // 切换缓存类型 需要配置 cache.type 为 complex
    Cache::store($name = '');
    
    // 判断缓存是否存在
    Cache::has($name);
    
    // 读取缓存
    Cache::get($name, $default = false);
    
    // 写入缓存
    Cache::set($name, $value, $expire = null);
    
    // 自增缓存(针对数值缓存)
    Cache::inc($name, $step = 1);
    
    // 自减缓存(针对数值缓存)
    Cache::dec($name, $step = 1);
    
    // 删除缓存
    Cache::rm($name);
    
    // 清除缓存
    Cache::clear($tag = null);
    
    // 读取缓存并删除
    Cache::pull($name);
    
    // 如果不存在则写入缓存
    Cache::remember($name, $value, $expire = null);
    
    // 缓存标签
    Cache::tag($name, $keys = null, $overlay = false);

    Config

    // 解析配置文件或内容
    Config::parse($config, $type = '', $name = '', $range = '');
    
    // 加载配置文件(PHP格式)
    Config::load($file, $name = '', $range = '');
    
    // 检测配置是否存在
    Config::has($name, $range = '');
    
    // 获取配置参数 为空则获取所有配置
    Config::get($name = null, $range = '');
    
    // 设置配置参数 name为数组则为批量设置
    Config::set($name, $value = null, $range = '');
    
    // 重置配置参数
    Config::reset($range = '');

    Controller

    $controller = new thinkController();
    
    // 前置操作
    $controller->beforeAction($method, $options = []);
    
    // 加载模板输出
    $controller->fetch($template = '', $vars = [], $replace = [], $config = []);
    
    // 渲染内容输出
    $controller->display($content = '', $vars = [], $replace = [], $config = []);
    
    // 模板变量赋值
    $controller->assign($name, $value = '');
    
    // 初始化模板引擎
    $controller->engine($engine);
    
    // 设置验证失败后是否抛出异常
    $controller->validateFailException($fail = true);
    
    // 验证数据
    $controller->validate($data, $validate, $message = [], $batch = false, $callback = null);

    Console

    Console::init($run = true);
    
    Console::call($command, array $parameters = [], $driver = 'buffer');
    
    $console = new thinkConsole();
    // 执行当前的指令
    $console->run();
    
    // 执行指令
    $console->doRun(Input $input, Output $output);
    
    // 设置输入参数定义
    $console->setDefinition(InputDefinition $definition);
    
    // 获取输入参数定义
    $console->getDefinition();
    
    // Gets the help message.
    $console->getHelp();
    
    // 是否捕获异常
    $console->setCatchExceptions($boolean);
    
    // 是否自动退出
    $console->setAutoExit($boolean);
    
    // 获取名称
    $console->getName();
    
    // 设置名称
    $console->setName($name);
    
    // 获取版本
    $console->getVersion();
    
    // 设置版本
    $console->setVersion($version);
    
    // 获取完整的版本号
    $console->getLongVersion();
    
    // 注册一个指令
    $console->register($name);
    
    // 添加指令
    $console->addCommands(array $commands);
    
    // 添加一个指令
    $console->add(Command $command);
    
    // 获取指令
    $console->get($name);
    
    // 某个指令是设置默认命令否存在
    $console->has($name);
    
    // 获取所有的命名空间
    $console->getNamespaces();
    
    // 查找注册命名空间中的名称或缩写。
    $console->findNamespace($namespace);
    
    // 查找指令
    $console->find($name);
    
    // 获取所有的指令
    $console->all($namespace = null);
    
    // 获取可能的指令名
    Console::getAbbreviations($names);
    
    // 配置基于用户的参数和选项的输入和输出实例。
    $this->configureIO(Input $input, Output $output);
    
    // 执行指令
    $this->doRunCommand(Command $command, Input $input, Output $output);
    
    // 获取指令的基础名称
    $this->getCommandName(Input $input);
    
    // 获取默认输入定义
    $this->getDefaultInputDefinition();
    
    // 设置默认命令
    $this->getDefaultCommands();
    
    Console::addDefaultCommands(array $classnames);
    
    // 获取可能的建议
    $this->getAbbreviationSuggestions($abbrevs);
    
    // 返回命名空间部分
    $console->extractNamespace($name, $limit = null);
    
    // 查找可替代的建议
    $this->findAlternatives($name, $collection);
    
    // 设置默认的指令
    $console->setDefaultCommand($commandName);
    
    // 返回所有的命名空间
    $this->extractAllNamespaces($name);

    File

    $file = new File('test.txt', 'a');
    
    //是否测试
    $file->isTest($test = false);
    
    // 设置上传信息
    $file->setUploadInfo($info);
    
    // 获取上传文件的信息
    $file->getInfo($name = '');
    
    // 获取上传文件的文件名
    $file->getSaveName();
    
    // 设置上传文件的保存文件名
    $file->setSaveName($saveName);
    
    // 获取文件的哈希散列值
    $file->hash($type = 'sha1');
    
    // 检查目录是否可写
    $this->checkPath($path);
    
    // 获取文件类型信息
    $file->getMime();
    
    // 设置文件的命名规则
    $file->rule($rule);
    
    // 设置上传文件的验证规则
    $file->validate($rule = []);
    
    // 检测是否合法的上传文件
    $file->isValid();
    
    // 检测上传文件
    $file->check($rule = []);
    
    // 检测上传文件后缀
    $file->checkExt($ext);
    
    // 检测图像文件
    $file->checkImg();
    
    // 判断图像类型
    $this->getImageType($image);
    
    // 检测上传文件大小
    $file->checkSize($size);
    
    // 检测上传文件类型
    $file->checkMime($mime);
    
     /**
     * 移动文件
     * @param  string           $path    保存路径
     * @param  string|bool      $savename    保存的文件名 默认自动生成
     * @param  boolean          $replace 同名文件是否覆盖
     * @return false|SplFileInfo false-失败 否则返回SplFileInfo实例
     */
    $file->move($path, $savename = true, $replace = true);
    
    // 获取保存文件名
    $this->buildSaveName($savename);
    
    // 获取错误代码信息
    $this->error($errorNo);
    
    // 获取错误信息
    $file->getError();

    Cookie

    // Cookie初始化
    Cookie::init();
    
    // 设置或者获取cookie作用域(前缀)
    Cookie::prefix($prefix = '');
    
    // Cookie 设置、获取、删除
    Cookie::set($name, $value = '', $option = null);
    
    // 永久保存Cookie数据
    Cookie::forever($name, $value = '', $option = null);
    
    // 判断Cookie数据
    Cookie::has($name, $prefix = null);
    
    // Cookie获取
    Cookie::get($name, $prefix = null);
    
    // Cookie删除
    Cookie::delete($name, $prefix = null);
    
    // Cookie清空
    Cookie::clear($prefix = null);
    
    Cookie::jsonFormatProtect(&$val, $key, $type = 'encode');

    Db

    // 数据库初始化 并取得数据库类实例
    Db::connect($config = [], $name = false);
    
    // 数据库连接参数解析
    Db::parseConfig($config);
    
    // DSN解析
    // 格式: mysql://username:passwd@localhost:3306/DbName?param1=val1¶m2=val2#utf8
    Db::parseDsn($dsnStr);
    
    // 调用驱动类的方法
    Db::__callStatic($method, $params);

    Debug

    // 记录时间(微秒)和内存使用情况
    Debug::remark($name, $value = '');
    
    // 统计某个区间的时间(微秒)使用情况
    Debug::getRangeTime($start, $end, $dec = 6);
    
    // 统计从开始到统计时的时间(微秒)使用情况
    Debug::getUseTime($dec = 6);
    
    // 获取当前访问的吞吐率情况
    Debug::getThroughputRate();
    
    // 记录区间的内存使用情况
    Debug::getRangeMem($start, $end, $dec = 2);
    
    // 统计从开始到统计时的内存使用情况
    Debug::getUseMem($dec = 2);
    
    // 统计区间的内存峰值情况
    Debug::getMemPeak($start, $end, $dec = 2);
    
    // 获取文件加载信息
    Debug::getFile($detail = false);
    
    // 浏览器友好的变量输出
    Debug::dump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE);
    
    Debug::inject(Response $response, &$content);

    Exception

    /**
     * 设置异常额外的Debug数据
     * 数据将会显示为下面的格式
     *
     * Exception Data
     * --------------------------------------------------
     * Label 1
     *   key1      value1
     *   key2      value2
     * Label 2
     *   key1      value1
     *   key2      value2
     *
     * @param string $label 数据分类,用于异常页面显示
     * @param array  $data  需要显示的数据,必须为关联数组
     */
    $this->setData($label, array $data);
    
    /**
     * 获取异常额外Debug数据
     * 主要用于输出到异常页面便于调试
     * @return array 由setData设置的Debug数据
     */
    $this->getData();

    Env

    // 获取环境变量值
    Env::get($name, $default = null);

    Hook

    /**
     * 动态添加行为扩展到某个标签
     * @param string    $tag 标签名称
     * @param mixed     $behavior 行为名称
     * @param bool      $first 是否放到开头执行
     * @return void
     */
    Hook::add($tag, $behavior, $first = false);
    
    /**
     * 批量导入插件
     * @param array        $tags 插件信息
     * @param boolean     $recursive 是否递归合并
     */
    Hook::import(array $tags, $recursive = true);
    
     /**
     * 获取插件信息
     * @param string $tag 插件位置 留空获取全部
     * @return array
     */
     Hook::get($tag = '');
    
     /**
     * 监听标签的行为
     * @param string $tag    标签名称
     * @param mixed  $params 传入参数
     * @param mixed  $extra  额外参数
     * @param bool   $once   只获取一个有效返回值
     * @return mixed
     */
    Hook::listen($tag, &$params = null, $extra = null, $once = false);
    
    /**
     * 执行某个行为
     * @param mixed     $class 要执行的行为
     * @param string    $tag 方法名(标签名)
     * @param Mixed     $params 传人的参数
     * @param mixed     $extra 额外参数
     * @return mixed
     */
    Hook::exec($class, $tag = '', &$params = null, $extra = null);

    Helper

    // 快速导入Traits PHP5.5以上无需调用
    load_trait($class, $ext = EXT);
    
    // 抛出异常处理
    exception($msg, $code = 0, $exception = '');
    
    /**
     * 记录时间(微秒)和内存使用情况
     * @param string            $start 开始标签
     * @param string            $end 结束标签
     * @param integer|string    $dec 小数位 如果是m 表示统计内存占用
     * @return mixed
     */
    debug($start, $end = '', $dec = 6);
    
    /**
     * 获取语言变量值
     * @param string    $name 语言变量名
     * @param array     $vars 动态变量值
     * @param string    $lang 语言
     * @return mixed
     */
    lang($name, $vars = [], $lang = '');
    
    /**
     * 获取和设置配置参数
     * @param string|array  $name 参数名
     * @param mixed         $value 参数值
     * @param string        $range 作用域
     * @return mixed
     */
    config($name = '', $value = null, $range = '');
    
    /**
     * 获取输入数据 支持默认值和过滤
     * @param string    $key 获取的变量名
     * @param mixed     $default 默认值
     * @param string    $filter 过滤方法
     * @return mixed
     */
    input($key = '', $default = null, $filter = '');
    
    /**
     * 渲染输出Widget
     * @param string    $name Widget名称
     * @param array     $data 传入的参数
     * @return mixed
     *
    widget($name, $data = []);
    
    /**
     * 实例化Model
     * @param string    $name Model名称
     * @param string    $layer 业务层名称
     * @param bool      $appendSuffix 是否添加类名后缀
     * @return 	hinkModel
     */
    model($name = '', $layer = 'model', $appendSuffix = false);
    
    /**
     * 实例化验证器
     * @param string    $name 验证器名称
     * @param string    $layer 业务层名称
     * @param bool      $appendSuffix 是否添加类名后缀
     * @return 	hinkValidate
     */
    validate($name = '', $layer = 'validate', $appendSuffix = false);
    
    /**
     * 实例化数据库类
     * @param string        $name 操作的数据表名称(不含前缀)
     * @param array|string  $config 数据库配置参数
     * @param bool          $force 是否强制重新连接
     * @return 	hinkdbQuery
     */
    db($name = '', $config = [], $force = true);
    
    /**
     * 实例化控制器 格式:[模块/]控制器
     * @param string    $name 资源地址
     * @param string    $layer 控制层名称
     * @param bool      $appendSuffix 是否添加类名后缀
     * @return 	hinkController
     */
    controller($name, $layer = 'controller', $appendSuffix = false);
    
    /**
     * 调用模块的操作方法 参数格式 [模块/控制器/]操作
     * @param string        $url 调用地址
     * @param string|array  $vars 调用参数 支持字符串和数组
     * @param string        $layer 要调用的控制层名称
     * @param bool          $appendSuffix 是否添加类名后缀
     * @return mixed
     */
    action($url, $vars = [], $layer = 'controller', $appendSuffix = false);
    
    /**
     * 导入所需的类库 同java的Import 本函数有缓存功能
     * @param string    $class 类库命名空间字符串
     * @param string    $baseUrl 起始路径
     * @param string    $ext 导入的文件扩展名
     * @return boolean
     */
    import($class, $baseUrl = '', $ext = EXT);
    
    /**
     * 快速导入第三方框架类库 所有第三方框架的类库文件统一放到 系统的Vendor目录下面
     * @param string    $class 类库
     * @param string    $ext 类库后缀
     * @return boolean
     */
    vendor($class, $ext = EXT);
    
    /**
     * 浏览器友好的变量输出
     * @param mixed     $var 变量
     * @param boolean   $echo 是否输出 默认为true 如果为false 则返回输出字符串
     * @param string    $label 标签 默认为空
     * @return void|string
     */
    dump($var, $echo = true, $label = null);
    
    /**
     * Url生成
     * @param string        $url 路由地址
     * @param string|array  $vars 变量
     * @param bool|string   $suffix 生成的URL后缀
     * @param bool|string   $domain 域名
     * @return string
     */
    url($url = '', $vars = '', $suffix = true, $domain = false);
    
    /**
     * Session管理
     * @param string|array  $name session名称,如果为数组表示进行session设置
     * @param mixed         $value session值
     * @param string        $prefix 前缀
     * @return mixed
     */
    session($name, $value = '', $prefix = null);
    
    /**
     * Cookie管理
     * @param string|array  $name cookie名称,如果为数组表示进行cookie设置
     * @param mixed         $value cookie值
     * @param mixed         $option 参数
     * @return mixed
     */
    cookie($name, $value = '', $option = null);
    
    /**
     * 缓存管理
     * @param mixed     $name 缓存名称,如果为数组表示进行缓存设置
     * @param mixed     $value 缓存值
     * @param mixed     $options 缓存参数
     * @param string    $tag 缓存标签
     * @return mixed
     */
    cache($name, $value = '', $options = null, $tag = null);
    
    /**
     * 记录日志信息
     * @param mixed     $log log信息 支持字符串和数组
     * @param string    $level 日志级别
     * @return void|array
     */
    trace($log = '[think]', $level = 'log');
    
    // 获取当前Request对象实例
    request();
    
    /**
     * 创建普通 Response 对象实例
     * @param mixed      $data   输出数据
     * @param int|string $code   状态码
     * @param array      $header 头信息
     * @param string     $type
     * @return Response
     */
    response($data = [], $code = 200, $header = [], $type = 'html');
    
    /**
     * 渲染模板输出
     * @param string    $template 模板文件
     * @param array     $vars 模板变量
     * @param array     $replace 模板替换
     * @param integer   $code 状态码
     * @return 	hink
    esponseView
     */
    view($template = '', $vars = [], $replace = [], $code = 200);
    
    /**
     * 获取	hink
    esponseJson对象实例
     * @param mixed   $data 返回的数据
     * @param integer $code 状态码
     * @param array   $header 头部
     * @param array   $options 参数
     * @return 	hink
    esponseJson
     */
    json($data = [], $code = 200, $header = [], $options = []);
    
    /**
     * 获取	hink
    esponseJsonp对象实例
     * @param mixed   $data    返回的数据
     * @param integer $code    状态码
     * @param array   $header 头部
     * @param array   $options 参数
     * @return 	hink
    esponseJsonp
     */
    jsonp($data = [], $code = 200, $header = [], $options = []);
    
    /**
     * 获取	hink
    esponseXml对象实例
     * @param mixed   $data    返回的数据
     * @param integer $code    状态码
     * @param array   $header  头部
     * @param array   $options 参数
     * @return 	hink
    esponseXml
     */
    xml($data = [], $code = 200, $header = [], $options = []);
    
    /**
     * 获取	hink
    esponseRedirect对象实例
     * @param mixed         $url 重定向地址 支持Url::build方法的地址
     * @param array|integer $params 额外参数
     * @param integer       $code 状态码
     * @param array         $with 隐式传参
     * @return 	hink
    esponseRedirect
     */
    redirect($url = [], $params = [], $code = 302, $with = []);
    
    /**
     * 抛出HTTP异常
     * @param integer|Response      $code 状态码 或者 Response对象实例
     * @param string                $message 错误信息
     * @param array                 $header 参数
     */
    abort($code, $message = null, $header = []);
    
    // 调试变量并且中断输出
    halt($var);
    
    /**
     * 生成表单令牌
     * @param string $name 令牌名称
     * @param mixed  $type 令牌生成方法
     * @return string
     */
    token($name = '__token__', $type = 'md5');
    
    /**
     * 延迟预载入关联查询
     * @param mixed $resultSet 数据集
     * @param mixed $relation 关联
     * @return array
     */
    load_relation($resultSet, $relation);
    
    // 数组转换为数据集对象
    collection($resultSet);

    Lang

    /**
     * 设置语言定义(不区分大小写)
     * @param string|array  $name 语言变量
     * @param string        $value 语言值
     * @param string        $range 语言作用域
     * @return mixed
     */
    Lang::set($name, $value = null, $range = '');
    
    /**
     * 加载语言定义(不区分大小写)
     * @param string $file 语言文件
     * @param string $range 语言作用域
     * @return mixed
     *
     Lang::load($file, $range = '');
    
     /**
     * 获取语言定义(不区分大小写)
     * @param string|null   $name 语言变量
     * @param array         $vars 变量替换
     * @param string        $range 语言作用域
     * @return mixed
     */
    Lang::has($name, $range = '');
    
    /**
     * 获取语言定义(不区分大小写)
     * @param string|null   $name 语言变量
     * @param array         $vars 变量替换
     * @param string        $range 语言作用域
     * @return mixed
     */
    Lang::get($name = null, $vars = [], $range = '');
    
    // 自动侦测设置获取语言选择
    Lang::detect();
    
    // 设置语言自动侦测的变量
    Lang::setLangDetectVar($var);
    
    // 设置语言的cookie保存变量
    Lang::setLangCookieVar($var);
    
    // 设置语言的cookie的过期时间
    Lang::setLangCookieExpire($expire);
    
    // 设置允许的语言列表
    Lang::setAllowLangList($list);

    Loader

    // 自动加载
    Loader::autoload($class);
    
    // 查找文件
    Loader::findFile($class);
    
    // 注册classmap
    Loader::addClassMap($class, $map = '');
    
    // 注册命名空间
    Loader::addNamespace($namespace, $path = '');
    
    // 添加Ps0空间
    Loader::addPsr0($prefix, $paths, $prepend = false);
    
    // 添加Psr4空间
    Loader::addPsr4($prefix, $paths, $prepend = false);
    
    // 注册命名空间别名
    Loader::addNamespaceAlias($namespace, $original = '');
    
    // 注册自动加载机制
    Loader::register($autoload = '');
    
    // 注册composer自动加载
    Loader::registerComposerLoader();
    
    /**
     * 导入所需的类库 同java的Import 本函数有缓存功能
     * @param string $class   类库命名空间字符串
     * @param string $baseUrl 起始路径
     * @param string $ext     导入的文件扩展名
     * @return boolean
     */
    Loader::import($class, $baseUrl = '', $ext = EXT);
    
    /**
     * 实例化(分层)模型
     * @param string $name         Model名称
     * @param string $layer        业务层名称
     * @param bool   $appendSuffix 是否添加类名后缀
     * @param string $common       公共模块名
     * @return Object
     * @throws ClassNotFoundException
     */
    Loader::model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common');
    
    /**
     * 实例化(分层)控制器 格式:[模块名/]控制器名
     * @param string $name         资源地址
     * @param string $layer        控制层名称
     * @param bool   $appendSuffix 是否添加类名后缀
     * @param string $empty        空控制器名称
     * @return Object|false
     * @throws ClassNotFoundException
     */
    Loader::controller($name, $layer = 'controller', $appendSuffix = false, $empty = '');
    
    /**
     * 实例化验证类 格式:[模块名/]验证器名
     * @param string $name         资源地址
     * @param string $layer        验证层名称
     * @param bool   $appendSuffix 是否添加类名后缀
     * @param string $common       公共模块名
     * @return Object|false
     * @throws ClassNotFoundException
     */
    Loader::validate($name = '', $layer = 'validate', $appendSuffix = false, $common = 'common');
    
    /**
     * 数据库初始化 并取得数据库类实例
     * @param mixed         $config 数据库配置
     * @param bool|string   $name 连接标识 true 强制重新连接
     * @return 	hinkdbConnection
     */
    Loader::db($config = [], $name = false);
    
    /**
     * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作
     * @param string       $url          调用地址
     * @param string|array $vars         调用参数 支持字符串和数组
     * @param string       $layer        要调用的控制层名称
     * @param bool         $appendSuffix 是否添加类名后缀
     * @return mixed
     */
    Loader::action($url, $vars = [], $layer = 'controller', $appendSuffix = false);
    
    /**
     * 字符串命名风格转换
     * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
     * @param string  $name 字符串
     * @param integer $type 转换类型
     * @param bool    $ucfirst 首字母是否大写(驼峰规则)
     * @return string
     */
    Loader::parseName($name, $type = 0, $ucfirst = true);
    
    /**
     * 解析应用类的类名
     * @param string $module 模块名
     * @param string $layer  层名 controller model ...
     * @param string $name   类名
     * @param bool   $appendSuffix
     * @return string
     */
    Loader::parseClass($module, $layer, $name, $appendSuffix = false);
    
    /**
     * 初始化类的实例
     * @return void
     */
    Loader::clearInstance();
    
    /**
     * 作用范围隔离
     *
     * @param $file
     * @return mixed
     */
    __include_file();
    
    __require_file($file);

    Log

    // 日志初始化
    Log::init($config = []);
    
    // 获取日志信息
    Log::getLog($type = '');
    
    /**
     * 记录调试信息
     * @param mixed  $msg  调试信息
     * @param string $type 信息类型
     * @return void
     */
     Log::record($msg, $type = 'log');
    
    // 清空日志信息
    Log::clear();
    
    // 当前日志记录的授权key
    Log::key($key);
    
    /**
     * 检查日志写入权限
     * @param array  $config  当前日志配置参数
     * @return bool
     */
    Log::check($config);
    
    // 保存调试信息
    Log::save();
    
    /**
     * 实时写入日志信息 并支持行为
     * @param mixed  $msg  调试信息
     * @param string $type 信息类型
     * @param bool   $force 是否强制写入
     * @return bool
     */
    Log::write($msg, $type = 'log', $force = false);
    
    // 静态调用
    Log::__callStatic($method, $args);

    Model

    $model = new Model();
    
    /**
     * 获取当前模型的数据库查询对象
     * @access public
     * @param bool $baseQuery 是否调用全局查询范围
     * @return Query
     */
    $model->db($baseQuery = true);
    
    $this->initialize();
    
    /**
     * 设置数据对象值
     * @access public
     * @param mixed $data  数据或者属性名
     * @param mixed $value 值
     * @return $this
     */
    $model->data($data, $value = null);
    
    /**
     * 获取对象原始数据 如果不存在指定字段返回false
     * @access public
     * @param string $name 字段名 留空获取全部
     * @return mixed
     * @throws InvalidArgumentException
     */
     $model->getData($name = null);
    
     /**
     * 修改器 设置数据对象值
     * @access public
     * @param string $name  属性名
     * @param mixed  $value 属性值
     * @param array  $data  数据
     * @return $this
     */
    $model->setAttr($name, $value, $data = []);
    
    /**
     * 自动写入时间戳
     * @access public
     * @param string $name 时间戳字段
     * @return mixed
     */
    $this->autoWriteTimestamp($name);
    
    /**
     * 时间日期字段格式化处理
     * @access public
     * @param mixed $time      时间日期表达式
     * @param mixed $format    日期格式
     * @param bool  $timestamp 是否进行时间戳转换
     * @return mixed
     */
    $this->formatDateTime($time, $format, $timestamp = false);
    
    /**
     * 数据写入 类型转换
     * @access public
     * @param mixed        $value 值
     * @param string|array $type  要转换的类型
     * @return mixed
     */
    $this->writeTransform($value, $type);
    
    // 获取器 获取数据对象的值
    $model->getAttr($name);
    
    /**
     * 数据读取 类型转换
     * @access public
     * @param mixed        $value 值
     * @param string|array $type  要转换的类型
     * @return mixed
     */
    $this->readTransform($value, $type);
    
    /**
     * 设置需要追加的输出属性
     * @access public
     * @param array $append   属性列表
     * @param bool  $override 是否覆盖
     * @return $this
     */
    $model->append($append = [], $override = false);
    
    /**
     * 设置附加关联对象的属性
     * @access public
     * @param string       $relation 关联方法
     * @param string|array $append   追加属性名
     * @return $this
     * @throws Exception
     */
    $model->appendRelationAttr($relation, $append);
    
    /**
     * 设置需要隐藏的输出属性
     * @access public
     * @param array $hidden   属性列表
     * @param bool  $override 是否覆盖
     * @return $this
     */
    $model->hidden($hidden = [], $override = false);
    
    /**
     * 设置需要输出的属性
     * @access public
     * @param array $visible
     * @param bool  $override 是否覆盖
     * @return $this
     */
    $model->visible($visible = [], $override = false);
    
    /**
     * 解析隐藏及显示属性
     * @access protected
     * @param array $attrs  属性
     * @param array $result 结果集
     * @param bool  $visible
     * @return array
     */
    $this->parseAttr($attrs, &$result, $visible = true);
    
    /**
     * 转换子模型对象
     * @access protected
     * @param Model|ModelCollection $model
     * @param                  $visible
     * @param                  $hidden
     * @param                  $key
     * @return array
     */
    $this->subToArray($model, $visible, $hidden, $key);
    
    // 转换当前模型对象为数组
    $model->toArray();
    
    /**
     * 转换当前模型对象为JSON字符串
     * @access public
     * @param integer $options json参数
     * @return string
     */
    $model->toJson($options = JSON_UNESCAPED_UNICODE);
    
    /**
     * 转换当前模型数据集为数据集对象
     * @access public
     * @param array|	hinkCollection $collection 数据集
     * @return 	hinkCollection
     */
    $model->toCollection($collection);
    
    /**
     * 关联数据一起更新
     * @access public
     * @param mixed $relation 关联
     * @return $this
     */
    $model->together($relation);
    
    /**
     * 获取模型对象的主键
     * @access public
     * @param string $name 模型名
     * @return mixed
     */
    $model->getPk($name = '');
    
    // 判断一个字段名是否为主键字段
    $this->isPk($key);
    
    /**
     * 保存当前数据对象
     * @access public
     * @param array  $data     数据
     * @param array  $where    更新条件
     * @param string $sequence 自增序列名
     * @return integer|false
     */
    $model->save($data = [], $where = [], $sequence = null);
    
    /**
     * 保存多个数据到当前数据对象
     * @access public
     * @param array   $dataSet 数据
     * @param boolean $replace 是否自动识别更新和写入
     * @return array|false
     * @throws Exception
     */
    $model->saveAll($dataSet, $replace = true);
    
    /**
     * 设置允许写入的字段
     * @access public
     * @param mixed $field 允许写入的字段 如果为true只允许写入数据表字段
     * @return $this
     */
    $model->allowField($field);
    
    /**
     * 设置只读字段
     * @access public
     * @param mixed $field 只读字段
     * @return $this
     */
    $model->readonly($field);
    
    /**
     * 是否为更新数据
     * @access public
     * @param bool  $update
     * @param mixed $where
     * @return $this
     */
    $model->isUpdate($update = true, $where = null);
    
    /**
     * 数据自动完成
     * @access public
     * @param array $auto 要自动更新的字段列表
     * @return void
     */
    $this->autoCompleteData($auto = []);
    
    // 删除当前的记录
    $model->delete();
    
    /**
     * 设置自动完成的字段( 规则通过修改器定义)
     * @access public
     * @param array $fields 需要自动完成的字段
     * @return $this
     */
    $model->auto($fields);
    
    /**
     * 设置字段验证
     * @access public
     * @param array|string|bool $rule  验证规则 true表示自动读取验证器类
     * @param array             $msg   提示信息
     * @param bool              $batch 批量验证
     * @return $this
     */
    $model->validate($rule = true, $msg = [], $batch = false);
    
    /**
     * 设置验证失败后是否抛出异常
     * @access public
     * @param bool $fail 是否抛出异常
     * @return $this
     */
    $model->validateFailException($fail = true);
    
    /**
     * 自动验证数据
     * @access protected
     * @param array $data  验证数据
     * @param mixed $rule  验证规则
     * @param bool  $batch 批量验证
     * @return bool
     */
    $this->validateData($data, $rule = null, $batch = null);
    
    // 返回模型的错误信息
    $this->getError();
    
    /**
     * 注册回调方法
     * @access public
     * @param string   $event    事件名
     * @param callable $callback 回调方法
     * @param bool     $override 是否覆盖
     * @return void
     */
    Model::event($event, $callback, $override = false);
    
    /**
     * 触发事件
     * @access protected
     * @param string $event  事件名
     * @param mixed  $params 传入参数(引用)
     * @return bool
     */
     $this->trigger($event, &$params);
    
     /**
     * 写入数据
     * @access public
     * @param array      $data  数据数组
     * @param array|true $field 允许字段
     * @return $this
     */
    Model::create($data = [], $field = null);
    
    /**
     * 更新数据
     * @access public
     * @param array      $data  数据数组
     * @param array      $where 更新条件
     * @param array|true $field 允许字段
     * @return $this
     */
    Model::update($data = [], $where = [], $field = null);
    
    /**
     * 查找单条记录
     * @access public
     * @param mixed        $data  主键值或者查询条件(闭包)
     * @param array|string $with  关联预查询
     * @param bool         $cache 是否缓存
     * @return static
     * @throws exceptionDbException
     */
    Model::get($data = null, $with = [], $cache = false);
    
    /**
     * 查找所有记录
     * @access public
     * @param mixed        $data  主键列表或者查询条件(闭包)
     * @param array|string $with  关联预查询
     * @param bool         $cache 是否缓存
     * @return static[]|false
     * @throws exceptionDbException
     */
    Model::all($data = null, $with = [], $cache = false);
    
    /**
     * 分析查询表达式
     * @access public
     * @param mixed  $data  主键列表或者查询条件(闭包)
     * @param string $with  关联预查询
     * @param bool   $cache 是否缓存
     * @return Query
     */
    Model::parseQuery(&$data, $with, $cache);
    
    /**
     * 删除记录
     * @access public
     * @param mixed $data 主键列表 支持闭包查询条件
     * @return integer 成功删除的记录数
     */
    Model::destroy($data);
    
    /**
     * 命名范围
     * @access public
     * @param string|array|Closure $name 命名范围名称 逗号分隔
     * @internal  mixed                 ...$params 参数调用
     * @return Model|Query
     */
    Model::scope($name);
    
    // 设置是否使用全局查询范围
    Model::useGlobalScope($use);
    
    /**
     * 根据关联条件查询当前模型
     * @access public
     * @param string  $relation 关联方法名
     * @param mixed   $operator 比较操作符
     * @param integer $count    个数
     * @param string  $id       关联表的统计字段
     * @return Relation|Query
     */
    Model::has($relation, $operator = '>=', $count = 1, $id = '*');
    
    /**
     * 根据关联条件查询当前模型
     * @access public
     * @param string $relation 关联方法名
     * @param mixed  $where    查询条件(数组或者闭包)
     * @return Relation|Query
     */
    Model::hasWhere($relation, $where = []);
    
    /**
     * 解析模型的完整命名空间
     * @access public
     * @param string $model 模型名(或者完整类名)
     * @return string
     */
     $this->parseModel($model);
    
     /**
     * 查询当前模型的关联数据
     * @access public
     * @param string|array $relations 关联名
     * @return $this
     */
    $model->relationQuery($relations);
    
    /**
     * 预载入关联查询 返回数据集
     * @access public
     * @param array  $resultSet 数据集
     * @param string $relation  关联名
     * @return array
     */
    $model->eagerlyResultSet(&$resultSet, $relation);
    
    /**
     * 预载入关联查询 返回模型对象
     * @access public
     * @param Model  $result   数据对象
     * @param string $relation 关联名
     * @return Model
     */
    $model->eagerlyResult(&$result, $relation);
    
    /**
     * 关联统计
     * @access public
     * @param Model        $result   数据对象
     * @param string|array $relation 关联名
     * @return void
     */
    $model->relationCount(&$result, $relation);
    
    /**
     * 获取模型的默认外键名
     * @access public
     * @param string $name 模型名
     * @return string
     */
    $this->getForeignKey($name);
    
    /**
     * HAS ONE 关联定义
     * @access public
     * @param string $model      模型名
     * @param string $foreignKey 关联外键
     * @param string $localKey   关联主键
     * @param array  $alias      别名定义(已经废弃)
     * @param string $joinType   JOIN类型
     * @return HasOne
     */
    $model->hasOne($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER');
    
    /**
     * BELONGS TO 关联定义
     * @access public
     * @param string $model      模型名
     * @param string $foreignKey 关联外键
     * @param string $localKey   关联主键
     * @param array  $alias      别名定义(已经废弃)
     * @param string $joinType   JOIN类型
     * @return BelongsTo
     */
    $model->belongsTo($model, $foreignKey = '', $localKey = '', $alias = [], $joinType = 'INNER');
    
    /**
     * HAS MANY 关联定义
     * @access public
     * @param string $model      模型名
     * @param string $foreignKey 关联外键
     * @param string $localKey   关联主键
     * @return HasMany
     */
    $model->hasMany($model, $foreignKey = '', $localKey = '');
    
    /**
     * HAS MANY 远程关联定义
     * @access public
     * @param string $model      模型名
     * @param string $through    中间模型名
     * @param string $foreignKey 关联外键
     * @param string $throughKey 关联外键
     * @param string $localKey   关联主键
     * @return HasManyThrough
     */
    $model->hasManyThrough($model, $through, $foreignKey = '', $throughKey = '', $localKey = '');
    
    /**
     * BELONGS TO MANY 关联定义
     * @access public
     * @param string $model      模型名
     * @param string $table      中间表名
     * @param string $foreignKey 关联外键
     * @param string $localKey   当前模型关联键
     * @return BelongsToMany
     */
    $model->belongsToMany($model, $table = '', $foreignKey = '', $localKey = '');
    
    /**
     * MORPH  MANY 关联定义
     * @access public
     * @param string       $model 模型名
     * @param string|array $morph 多态字段信息
     * @param string       $type  多态类型
     * @return MorphMany
     */
    $model->morphMany($model, $morph = null, $type = '');
    
    /**
     * MORPH TO 关联定义
     * @access public
     * @param string|array $morph 多态字段信息
     * @param array        $alias 多态别名定义
     * @return MorphTo
     */
    $model->morphTo($morph = null, $alias = []);
    
    $model->__call($method, $args);
    
    Model::__callStatic($method, $params);
    
    /**
     * 修改器 设置数据对象的值
     * @access public
     * @param string $name  名称
     * @param mixed  $value 值
     * @return void
     */
     $model->__set($name, $value);
    
    /**
     * 获取器 获取数据对象的值
     * @access public
     * @param string $name 名称
     * @return mixed
     */
    $model->__get($name);
    
    // 检测数据对象的值
    $model->__isset($name);
    
    /**
     * 销毁数据对象的值
     * @access public
     * @param string $name 名称
     * @return void
     */
    $model->__unset($name);
    
    $model->__toString();
    
    $model->jsonSerialize();
    
    $model->offsetSet($name, $value);
    
    $model->offsetExists($name);
    
    $model->offsetUnset($name);
    
    $model->offsetGet($name);
    
    // 解序列化后处理
    $model->__wakeup();
    
    // 模型事件快捷方法
    Model::beforeInsert($callback, $override = false);
    
    Model::afterInsert($callback, $override = false);
    
    Model::beforeUpdate($callback, $override = false);
    
    Model::afterUpdate($callback, $override = false);
    
    Model::beforeWrite($callback, $override = false);
    
    Model::afterWrite($callback, $override = false);
    
    Model::beforeDelete($callback, $override = false);
    
    Model::afterDelete($callback, $override = false);

    Process

    /**
     * 构造方法
     * @param string         $commandline 指令
     * @param string|null    $cwd         工作目录
     * @param array|null     $env         环境变量
     * @param string|null    $input       输入
     * @param int|float|null $timeout     超时时间
     * @param array          $options     proc_open的选项
     * @throws RuntimeException
     * @api
     */
    $process = new Process($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = []);
    
    // 停止
    $process->__destruct();
    
    // 克隆
    $process->__clone();
    
    /**
     * 运行指令
     * @param callback|null $callback
     * @return int
     */
    $process->run($callback = null);
    
    /**
     * 运行指令
     * @param callable|null $callback
     * @return self
     * @throws RuntimeException
     * @throws ProcessFailedException
     */
    $process->mustRun($callback = null);
    
    /**
     * 启动进程并写到 STDIN 输入后返回。
     * @param callable|null $callback
     * @throws RuntimeException
     * @throws RuntimeException
     * @throws LogicException
     */
     $process->start($callback = null);
    
     /**
     * 重启进程
     * @param callable|null $callback
     * @return Process
     * @throws RuntimeException
     * @throws RuntimeException
     */
    $process->restart($callback = null);
    
    /**
     * 等待要终止的进程
     * @param callable|null $callback
     * @return int
     */
    $process->wait($callback = null);
    
    /**
     * 获取PID
     * @return int|null
     * @throws RuntimeException
     */
    $process->getPid();
    
    /**
     * 将一个 POSIX 信号发送到进程中
     * @param int $signal
     * @return Process
     */
    $process->signal($signal);
    
    // 禁用从底层过程获取输出和错误输出。
    $process->disableOutput();
    
    // 开启从底层过程获取输出和错误输出。
    $process->enableOutput();
    
    // 输出是否禁用
    $process->isOutputDisabled();
    
    /**
     * 获取当前的输出管道
     * @return string
     * @throws LogicException
     * @throws LogicException
     * @api
     */
    $process->getOutput();
    
    // 以增量方式返回的输出结果。
    $process->getIncrementalOutput();
    
    // 清空输出
    $process->clearOutput();
    
    // 返回当前的错误输出的过程 (STDERR)。
    $process->getErrorOutput();
    
    // 以增量方式返回 errorOutput
    $process->getIncrementalErrorOutput();
    
    // 清空 errorOutput
    $process->clearErrorOutput();
    
    /**
     * 获取退出码
     * @return null|int
     */
    $process->getExitCode();
    
    /**
     * 获取退出文本
     * @return null|string
     */
    $process->getExitCodeText();
    
    // 检查是否成功
    $process->isSuccessful();
    
    // 是否未捕获的信号已被终止子进程
    $process->hasBeenSignaled();
    
    // 返回导致子进程终止其执行的数。
    $process->getTermSignal();
    
    // 检查是否正在运行
    $process->isRunning();
    
    // 检查是否已开始
    $process->isStarted();
    
    // 检查是否已终止
    $process->isTerminated();
    
    // 获取当前的状态
    $process->getStatus();
    
    // 终止进程
    $process->stop();
    
    // 添加一行输出
    $process->addOutput($line);
    
    // 添加一行错误输出
    $process->addErrorOutput($line);
    
    // 获取被执行的指令
    $process->getCommandLine();
    
    // 设置指令
    $process->setCommandLine($commandline);
    
    // 获取超时时间
    $process->getTimeout();
    
    // 获取idle超时时间
    $process->getIdleTimeout();
    
    // 设置超时时间
    $process->setTimeout($timeout);
    
    // 设置idle超时时间
    $process->setIdleTimeout($timeout);
    
    // 设置TTY
    $process->setTty($tty);
    
    // 检查是否是tty模式
    $process->isTty();
    
    // 设置pty模式
    $process->setPty($bool);
    
    // 是否是pty模式
    $process->isPty();
    
    // 获取工作目录
    $process->getWorkingDirectory();
    
    // 设置工作目录
    $process->setWorkingDirectory($cwd);
    
    // 获取环境变量
    $process->getEnv();
    
    // 设置环境变量
    $process->setEnv(array $env);
    
    // 获取输入
    $process->getInput();
    
    // 设置输入
    $process->setInput($input);
    
    // 获取proc_open的选项
    $process->getOptions();
    
    // 设置proc_open的选项
    $process->setOptions(array $options);
    
    // 是否兼容windows
    $process->getEnhanceWindowsCompatibility();
    
    // 设置是否兼容windows
    $process->setEnhanceWindowsCompatibility($enhance);
    
    // 返回是否 sigchild 兼容模式激活
    $process->getEnhanceSigchildCompatibility();
    
    // 激活 sigchild 兼容性模式。
    $process->setEnhanceSigchildCompatibility($enhance);
    
    // 是否超时
    $process->checkTimeout();
    
    // 是否支持pty
    Process::isPtySupported();
    
    // 创建所需的 proc_open 的描述符
    $this->getDescriptors();
    
    // 建立 wait () 使用的回调。
    $this->buildCallback($callback);
    
    // 更新状态
    $this->updateStatus($blocking);
    
    // 是否开启 '--enable-sigchild'
    $this->isSigchildEnabled();
    
    // 验证是否超时
    $this->validateTimeout($timeout);
    
    // 读取pipes
    $this->readPipes($blocking, $close);
    
    // 捕获退出码
    $this->captureExitCode();
    
    /**
     * 关闭资源
     * @return int 退出码
     */
    $this->close();
    
    // 重置数据
    $this->resetProcessData();
    
    // 将一个 POSIX 信号发送到进程中。
    $this->doSignal($signal, $throwException);
    
    // 确保进程已经开启
    $this->requireProcessIsStarted($functionName);
    
    // 确保进程已经终止
    $this->requireProcessIsTerminated($functionName);

    Request

    /**
     * Hook 方法注入
     * @access public
     * @param string|array  $method 方法名
     * @param mixed         $callback callable
     * @return void
     */
    Request::hook($method, $callback = null);
    
    // 初始化
    Request::instance($options = []);
    
    /**
     * 创建一个URL请求
     * @access public
     * @param string    $uri URL地址
     * @param string    $method 请求类型
     * @param array     $params 请求参数
     * @param array     $cookie
     * @param array     $files
     * @param array     $server
     * @param string    $content
     * @return 	hinkRequest
     */
    Request::create($uri, $method = 'GET', $params = [], $cookie = [], $files = [], $server = [], $content = null);
    
    // 设置或获取当前包含协议的域名
    $request = new Request();
    $request->domain($domain = null);
    
    /**
     * 设置或获取当前完整URL 包括QUERY_STRING
     * @access public
     * @param string|true $url URL地址 true 带域名获取
     * @return string
     */
    
    /**
     * 设置或获取当前URL 不含QUERY_STRING
     * @access public
     * @param string $url URL地址
     * @return string
     */
    $request->baseUrl($url = null);
    
    /**
     * 设置或获取当前执行的文件 SCRIPT_NAME
     * @access public
     * @param string $file 当前执行的文件
     * @return string
     */
    $request->baseFile($file = null);
    
    /**
     * 设置或获取URL访问根地址
     * @access public
     * @param string $url URL地址
     * @return string
     */
    $request->root($url = null);
    
    // 获取当前请求URL的pathinfo信息(含URL后缀)
    $request->pathinfo();
    
    // 获取当前请求URL的pathinfo信息(不含URL后缀)
    $request->path();
    
    // 当前URL的访问后缀
    $request->ext();
    
    // 获取当前请求的时间
    $request->time($float = false);
    
    /**
     * 当前请求的资源类型
     * @access public
     * @return false|string
     */
    $request->type();
    
    /**
     * 设置资源类型
     * @access public
     * @param string|array  $type 资源类型名
     * @param string        $val 资源类型
     * @return void
     */
    $request->mimeType($type, $val = '');
    
    /**
     * 当前的请求类型
     * @access public
     * @param bool $method  true 获取原始请求类型
     * @return string
     */
    $request->method($method = false);
    
    // 是否为GET请求
    $request->isGet();
    
    // 是否为POST请求
    $request->isPost();
    
    // 是否为PUT请求
    $request->isPut();
    
    // 是否为DELTE请求
    $request->isDelete();
    
    // 是否为HEAD请求
    $request->isHead();
    
    // 是否为PATCH请求
    $request->isPatch();
    
    // 是否为OPTIONS请求
    $request->isOptions();
    
    // 是否为cli
    $request->isCli();
    
    // 是否为cgi
    $request->isCgi();
    
    /**
     * 获取获取当前请求的参数
     * @access public
     * @param string|array  $name 变量名
     * @param mixed         $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->param($name = '', $default = null, $filter = '');
    
    /**
     * 设置获取获取路由参数
     * @access public
     * @param string|array  $name 变量名
     * @param mixed         $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->route($name = '', $default = null, $filter = '');
    
    /**
     * 设置获取获取GET参数
     * @access public
     * @param string|array  $name 变量名
     * @param mixed         $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->get($name = '', $default = null, $filter = '');
    
    /**
     * 设置获取获取POST参数
     * @access public
     * @param string        $name 变量名
     * @param mixed         $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->post($name = '', $default = null, $filter = '');
    
    /**
     * 设置获取获取PUT参数
     * @access public
     * @param string|array      $name 变量名
     * @param mixed             $default 默认值
     * @param string|array      $filter 过滤方法
     * @return mixed
     */
    $request->put($name = '', $default = null, $filter = '');
    
    /**
     * 设置获取获取DELETE参数
     * @access public
     * @param string|array      $name 变量名
     * @param mixed             $default 默认值
     * @param string|array      $filter 过滤方法
     * @return mixed
     */
    $request->delete($name = '', $default = null, $filter = '');
    
    /**
     * 设置获取获取PATCH参数
     * @access public
     * @param string|array      $name 变量名
     * @param mixed             $default 默认值
     * @param string|array      $filter 过滤方法
     * @return mixed
     */
    $Req
    
    
    /**
     * 获取request变量
     * @param string        $name 数据名称
     * @param string        $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->request($name = '', $default = null, $filter = '');
    
    /**
     * 获取session数据
     * @access public
     * @param string|array  $name 数据名称
     * @param string        $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->session($name = '', $default = null, $filter = '');
    
    
    /**
     * 获取cookie参数
     * @access public
     * @param string|array  $name 数据名称
     * @param string        $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->cookie($name = '', $default = null, $filter = '');
    
    /**
     * 获取server参数
     * @access public
     * @param string|array  $name 数据名称
     * @param string        $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->server($name = '', $default = null, $filter = '');
    
    /**
     * 获取上传的文件信息
     * @access public
     * @param string|array $name 名称
     * @return null|array|	hinkFile
     */
    $request->file($name = '');
    
    /**
     * 获取环境变量
     * @param string|array  $name 数据名称
     * @param string        $default 默认值
     * @param string|array  $filter 过滤方法
     * @return mixed
     */
    $request->env($name = '', $default = null, $filter = '');
    
    /**
     * 设置或者获取当前的Header
     * @access public
     * @param string|array  $name header名称
     * @param string        $default 默认值
     * @return string
     */
    $request->header($name = '', $default = null);
    
    /**
     * 获取变量 支持过滤和默认值
     * @param array         $data 数据源
     * @param string|false  $name 字段名
     * @param mixed         $default 默认值
     * @param string|array  $filter 过滤函数
     * @return mixed
     */
     $request->input($data = [], $name = '', $default = null, $filter = '');
    
     /**
     * 设置或获取当前的过滤规则
     * @param mixed $filter 过滤规则
     * @return mixed
     */
    $request->filter($filter = null);
    
    /**
     * 递归过滤给定的值
     * @param mixed     $value 键值
     * @param mixed     $key 键名
     * @param array     $filters 过滤方法+默认值
     * @return mixed
     */
     $this->filterValue(&$value, $key, $filters);
    
     // 过滤表单中的表达式
     $request->filterExp(&$value);
    
     /**
     * 强制类型转换
     * @param string $data
     * @param string $type
     * @return mixed
     */
    $this->typeCast(&$data, $type);
    
    /**
     * 是否存在某个请求参数
     * @access public
     * @param string    $name 变量名
     * @param string    $type 变量类型
     * @param bool      $checkEmpty 是否检测空值
     * @return mixed
     */
    $request->has($name, $type = 'param', $checkEmpty = false);
    
    /**
     * 获取指定的参数
     * @access public
     * @param string|array  $name 变量名
     * @param string        $type 变量类型
     * @return mixed
     */
    $request->only($name, $type = 'param');
    
    /**
     * 排除指定参数获取
     * @access public
     * @param string|array  $name 变量名
     * @param string        $type 变量类型
     * @return mixed
     */
    $request->except($name, $type = 'param');
    
    // 当前是否ssl
    $request->isSsl();
    
    /**
     * 当前是否Ajax请求
     * @access public
     * @param bool $ajax  true 获取原始ajax请求
     * @return bool
     */
    $request->isAjax($ajax = false);
    
    /**
     * 当前是否Pjax请求
     * @access public
     * @param bool $pjax  true 获取原始pjax请求
     * @return bool
     */
    $request->isPjax($pjax = false);
    
    /**
     * 获取客户端IP地址
     * @param integer   $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
     * @param boolean   $adv 是否进行高级模式获取(有可能被伪装)
     * @return mixed
     */
    $requet->ip($type = 0, $adv = false);
    
    // 检测是否使用手机访问
    $request->isMobile();
    
    // 当前URL地址中的scheme参数
    $request->scheme();
    
    // 当前请求URL地址中的query参数
    $request->query();
    
    // 当前请求的host
    $request->host();
    
    // 当前请求URL地址中的port参数
    $request->port();
    
    // 当前请求 SERVER_PROTOCOL
    $request->protocol();
    
    // 当前请求 REMOTE_PORT
    $request->remotePort();
    
    // 当前请求 HTTP_CONTENT_TYPE
    $request->contentType();
    
    // 获取当前请求的路由信息
    $request->routeInfo($route = []);
    
    /**
     * 设置或者获取当前请求的调度信息
     * @access public
     * @param array  $dispatch 调度信息
     * @return array
     */
    $request->dispatch($dispatch = null);
    
    /**
     * 设置或者获取当前的模块名
     * @access public
     * @param string $module 模块名
     * @return string|Request
     */
    $request->module($module = null);
    
    // 设置或者获取当前的控制器名
    $request->controller($controller = null);
    
    // 设置或者获取当前的操作名
    $request->action($action = null);
    
    // 设置或者获取当前的语言
    $request->langset($lang = null);
    
    // 设置或者获取当前请求的content
    $request->getContent();
    
    // 获取当前请求的php://input
    $request->getInput();
    
    /**
     * 生成请求令牌
     * @access public
     * @param string $name 令牌名称
     * @param mixed  $type 令牌生成方法
     * @return string
     */
    $request->token($name = '__token__', $type = 'md5');
    
    /**
     * 设置当前地址的请求缓存
     * @access public
     * @param string $key 缓存标识,支持变量规则 ,例如 item/:name/:id
     * @param mixed  $expire 缓存有效期
     * @param array  $except 缓存排除
     * @return void
     */
    $request->cache($key, $expire = null, $except = []);
    
    // 读取请求缓存设置
    $request->getCache();
    
    /**
     * 设置当前请求绑定的对象实例
     * @access public
     * @param string $name 绑定的对象标识
     * @param mixed  $obj 绑定的对象实例
     * @return mixed
     */
    $request->bind($name, $obj = null);
    

    Response

    /**
     * 构造函数
     * @access   public
     * @param mixed $data    输出数据
     * @param int   $code
     * @param array $header
     * @param array $options 输出参数
     */
    $response = new Response($data = '', $code = 200, array $header = [], $options = []);
    
    /**
     * 创建Response对象
     * @access public
     * @param mixed  $data    输出数据
     * @param string $type    输出类型
     * @param int    $code
     * @param array  $header
     * @param array  $options 输出参数
     * @return Response|JsonResponse|ViewResponse|XmlResponse|RedirectResponse|JsonpResponse
     */
    Response::create($data = '', $type = '', $code = 200, array $header = [], $options = []);
    
    /**
     * 发送数据到客户端
     * @access public
     * @return mixed
     * @throws InvalidArgumentException
     */
    $response->send();
    
    /**
     * 处理数据
     * @access protected
     * @param mixed $data 要处理的数据
     * @return mixed
     */
    $this->output($data);
    
    /**
     * 输出的参数
     * @access public
     * @param mixed $options 输出参数
     * @return $this
     */
    $response->options($options = []);
    
    /**
     * 输出数据设置
     * @access public
     * @param mixed $data 输出数据
     * @return $this
     */
    $response->data($data);
    
    /**
     * 设置响应头
     * @access public
     * @param string|array $name  参数名
     * @param string       $value 参数值
     * @return $this
     */
    $response->header($name, $value = null);
    
    /**
     * 设置页面输出内容
     * @param $content
     * @return $this
     */
    $response->content($content);
    
    /**
     * 发送HTTP状态
     * @param integer $code 状态码
     * @return $this
     */
    $response->code($code);
    
    /**
     * LastModified
     * @param string $time
     * @return $this
     */
    $response->lastModified($time);
    
    /**
     * Expires
     * @param string $time
     * @return $this
     */
    $response->expires($time);
    
    /**
     * ETag
     * @param string $eTag
     * @return $this
     */
    $response->eTag($eTag);
    
    /**
     * 页面缓存控制
     * @param string $cache 状态码
     * @return $this
     */
    $response->cacheControl($cache);
    
    /**
     * 页面输出类型
     * @param string $contentType 输出类型
     * @param string $charset     输出编码
     * @return $this
     */
    $response->contentType($contentType, $charset = 'utf-8');
    
    /**
     * 获取头部信息
     * @param string $name 头部名称
     * @return mixed
     */
    $response->getHeader($name = '');
    
    /**
     * 获取原始数据
     * @return mixed
     */
    $response->getData();
    
    /**
     * 获取输出数据
     * @return mixed
     */
    $response->getContent();
    
    /**
     * 获取状态码
     * @return integer
     */
    $response->getCode();

    Route

    /**
     * 注册变量规则
     * @access public
     * @param string|array  $name 变量名
     * @param string        $rule 变量规则
     * @return void
     */
    Route::pattern($name = null, $rule = '');
    
    /**
     * 注册子域名部署规则
     * @access public
     * @param string|array  $domain 子域名
     * @param mixed         $rule 路由规则
     * @param array         $option 路由参数
     * @param array         $pattern 变量规则
     * @return void
     */
    Route::domain($domain, $rule = '', $option = [], $pattern = []);
    
    self::setDomain($domain);
    
    /**
     * 设置路由绑定
     * @access public
     * @param mixed     $bind 绑定信息
     * @param string    $type 绑定类型 默认为module 支持 namespace class controller
     * @return mixed
     */
    Route::bind($bind, $type = 'module');
    
    /**
     * 设置或者获取路由标识
     * @access public
     * @param string|array     $name 路由命名标识 数组表示批量设置
     * @param array            $value 路由地址及变量信息
     * @return array
     */
    Route:;name($name = '', $value = null);
    
    /**
     * 读取路由绑定
     * @access public
     * @param string    $type 绑定类型
     * @return mixed
     */
    Route::getBind($type);
    
    /**
     * 导入配置文件的路由规则
     * @access public
     * @param array     $rule 路由规则
     * @param string    $type 请求类型
     * @return void
     */
    Route::import(array $rule, $type = '*');
    
    // 批量注册路由
    self::registerRules($rules, $type = '*');
    
    /**
     * 注册路由规则
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param string    $type 请求类型
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    self::rule($rule, $route = '', $type = '*', $option = [], $pattern = []);
    
    /**
     * 设置路由规则
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param string    $type 请求类型
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @param string    $group 所属分组
     * @return void
     */
    self::setRule($rule, $route, $type = '*', $option = [], $pattern = [], $group = '');
    
    /**
     * 设置当前执行的参数信息
     * @access public
     * @param array    $options 参数信息
     * @return mixed
     */
    self::setOption($options = []);
    
    /**
     * 获取当前执行的所有参数信息
     * @access public
     * @return array
     */
    Route::getOption();
    
    /**
     * 获取当前的分组信息
     * @access public
     * @param string    $type 分组信息名称 name option pattern
     * @return mixed
     */
    Route::getGroup($type);
    
    /**
     * 设置当前的路由分组
     * @access public
     * @param string    $name 分组名称
     * @param array     $option 分组路由参数
     * @param array     $pattern 分组变量规则
     * @return void
     */
    Route::setGroup($name, $option = [], $pattern = []);
    
    /**
     * 注册路由分组
     * @access public
     * @param string|array      $name 分组名称或者参数
     * @param array|Closure    $routes 路由地址
     * @param array             $option 路由参数
     * @param array             $pattern 变量规则
     * @return void
     */
    Route::group($name, $routes, $option = [], $pattern = []);
    
    /**
     * 注册路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::any($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册GET路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::get($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册POST路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::post($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册PUT路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::put($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册DELETE路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::delete($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册PATCH路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::patch($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册资源路由
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::resource($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册控制器路由 操作方法对应不同的请求后缀
     * @access public
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param array     $option 路由参数
     * @param array     $pattern 变量规则
     * @return void
     */
    Route::controller($rule, $route = '', $option = [], $pattern = []);
    
    /**
     * 注册别名路由
     * @access public
     * @param string|array  $rule 路由别名
     * @param string        $route 路由地址
     * @param array         $option 路由参数
     * @return void
     */
    Route::alias($rule = null, $route = '', $option = []);
    
    /**
     * 设置不同请求类型下面的方法前缀
     * @access public
     * @param string    $method 请求类型
     * @param string    $prefix 类型前缀
     * @return void
     */
    Route::setMethodPrefix($method, $prefix = '');
    
    /**
     * rest方法定义和修改
     * @access public
     * @param string        $name 方法名称
     * @param array|bool    $resource 资源
     * @return void
     */
    Route::rest($name, $resource = []);
    
    /**
     * 注册未匹配路由规则后的处理
     * @access public
     * @param string    $route 路由地址
     * @param string    $method 请求类型
     * @param array     $option 路由参数
     * @return void
     */
    Route::miss($route, $method = '*', $option = []);
    
    /**
     * 注册一个自动解析的URL路由
     * @access public
     * @param string    $route 路由地址
     * @return void
     */
    Route::function auto($route);
    
    /**
     * 获取或者批量设置路由定义
     * @access public
     * @param mixed $rules 请求类型或者路由定义数组
     * @return array
     */
    Route::rules($rules = '');
    
    /**
     * 检测子域名部署
     * @access public
     * @param Request   $request Request请求对象
     * @param array     $currentRules 当前路由规则
     * @param string    $method 请求类型
     * @return void
     */
    Route::checkDomain($request, &$currentRules, $method = 'get');
    
    /**
     * 检测URL路由
     * @access public
     * @param Request   $request Request请求对象
     * @param string    $url URL地址
     * @param string    $depr URL分隔符
     * @param bool      $checkDomain 是否检测域名规则
     * @return false|array
     */
    Route::check($request, $url, $depr = '/', $checkDomain = false);
    
    self::getRouteExpress($key);
    
    /**
     * 检测路由规则
     * @access private
     * @param Request   $request
     * @param array     $rules 路由规则
     * @param string    $url URL地址
     * @param string    $depr URL分割符
     * @param string    $group 路由分组名
     * @param array     $options 路由参数(分组)
     * @return mixed
     */
    self::checkRoute($request, $rules, $url, $depr = '/', $group = '', $options = []);
    
    /**
     * 检测路由别名
     * @access private
     * @param Request   $request
     * @param string    $url URL地址
     * @param string    $depr URL分隔符
     * @return mixed
     */
    self::checkRouteAlias($request, $url, $depr);
    
    /**
     * 检测URL绑定
     * @access private
     * @param string    $url URL地址
     * @param array     $rules 路由规则
     * @param string    $depr URL分隔符
     * @return mixed
     */
    self::checkUrlBind(&$url, &$rules, $depr = '/');
    
    /**
     * 绑定到类
     * @access public
     * @param string    $url URL地址
     * @param string    $class 类名(带命名空间)
     * @param string    $depr URL分隔符
     * @return array
     */
    Route::bindToClass($url, $class, $depr = '/');
    
    /**
     * 绑定到命名空间
     * @access public
     * @param string    $url URL地址
     * @param string    $namespace 命名空间
     * @param string    $depr URL分隔符
     * @return array
     */
    Route::bindToNamespace($url, $namespace, $depr = '/');
    
    /**
     * 绑定到控制器类
     * @access public
     * @param string    $url URL地址
     * @param string    $controller 控制器名 (支持带模块名 index/user )
     * @param string    $depr URL分隔符
     * @return array
     */
    Route::bindToController($url, $controller, $depr = '/');
    
    /**
     * 绑定到模块/控制器
     * @access public
     * @param string    $url URL地址
     * @param string    $controller 控制器类名(带命名空间)
     * @param string    $depr URL分隔符
     * @return array
     */
    Route::bindToModule($url, $controller, $depr = '/');
    
    /**
     * 路由参数有效性检查
     * @access private
     * @param array     $option 路由参数
     * @param Request   $request Request对象
     * @return bool
     */
    self::checkOption($option, $request);
    
    /**
     * 检测路由规则
     * @access private
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param string    $url URL地址
     * @param array     $pattern 变量规则
     * @param array     $option 路由参数
     * @param string    $depr URL分隔符(全局)
     * @return array|false
     */
    self::checkRule($rule, $route, $url, $pattern, $option, $depr);
    
    /**
     * 解析模块的URL地址 [模块/控制器/操作?]参数1=值1&参数2=值2...
     * @access public
     * @param string    $url URL地址
     * @param string    $depr URL分隔符
     * @param bool      $autoSearch 是否自动深度搜索控制器
     * @return array
     */
    Route::parseUrl($url, $depr = '/', $autoSearch = false);
    
    /**
     * 解析URL的pathinfo参数和变量
     * @access private
     * @param string    $url URL地址
     * @return array
     */
    self::parseUrlPath($url);
    
    /**
     * 检测URL和规则路由是否匹配
     * @access private
     * @param string    $url URL地址
     * @param string    $rule 路由规则
     * @param array     $pattern 变量规则
     * @return array|false
     */
    self::match($url, $rule, $pattern);
    
    /**
     * 解析规则路由
     * @access private
     * @param string    $rule 路由规则
     * @param string    $route 路由地址
     * @param string    $pathinfo URL地址
     * @param array     $option 路由参数
     * @param array     $matches 匹配的变量
     * @return array
     */
    self::parseRule($rule, $route, $pathinfo, $option = [], $matches = []);
    
    /**
     * 解析URL地址为 模块/控制器/操作
     * @access private
     * @param string    $url URL地址
     * @return array
     */
    self::parseModule($url);
    
    /**
     * 解析URL地址中的参数Request对象
     * @access private
     * @param string    $rule 路由规则
     * @param array     $var 变量
     * @return void
     */
    self::parseUrlParams($url, &$var = []);
    
    // 分析路由规则中的变量
    self::parseVar($rule);

    Session

    // 设置或者获取session作用域(前缀)
    Session::prefix($prefix = '');
    
    /**
     * session初始化
     * @param array $config
     * @return void
     * @throws 	hinkException
     */
    Session::init(array $config = []);
    
    // session自动启动或者初始化
    Session::boot();
    
    /**
     * session设置
     * @param string        $name session名称
     * @param mixed         $value session值
     * @param string|null   $prefix 作用域(前缀)
     * @return void
     */
    Session::set($name, $value = '', $prefix = null);
    
    /**
     * session获取
     * @param string        $name session名称
     * @param string|null   $prefix 作用域(前缀)
     * @return mixed
     */
    Session::get($name = '', $prefix = null);
    
    /**
     * session获取并删除
     * @param string        $name session名称
     * @param string|null   $prefix 作用域(前缀)
     * @return mixed
     */
    Session::pull($name, $prefix = null);
    
    /**
     * session设置 下一次请求有效
     * @param string        $name session名称
     * @param mixed         $value session值
     * @param string|null   $prefix 作用域(前缀)
     * @return void
     */
    Session::flash($name, $value);
    
    // 清空当前请求的session数据
    Session::function flush();
    
    /**
     * 删除session数据
     * @param string|array  $name session名称
     * @param string|null   $prefix 作用域(前缀)
     * @return void
     */
    Session::delete($name, $prefix = null);
    
    /**
     * 清空session数据
     * @param string|null   $prefix 作用域(前缀)
     * @return void
     */
    Session::clear($prefix = null);
    
    /**
     * 判断session数据
     * @param string        $name session名称
     * @param string|null   $prefix
     * @return bool
     */
    Session::has($name, $prefix = null);
    
    /**
     * 添加数据到一个session数组
     * @param  string  $key
     * @param  mixed   $value
     * @return void
     */
    Session::push($key, $value);
    
    /**
     * 启动session
     * @return void
     */
    Session::start();
    
    /**
     * 销毁session
     * @return void
     */
    Session::destroy();
    
    /**
     * 重新生成session_id
     * @param bool $delete 是否删除关联会话文件
     * @return void
     */
    Session::regenerate($delete = false);
    
    /**
     * 暂停session
     * @return void
     */
    Session::pause();

    Template

    // 构造函数
    $template = new Template(array $config = []);
    
    
    /**
     * 字符串替换 避免正则混淆
     * @access private
     * @param string $str
     * @return string
     */
    $this->stripPreg($str);
    
    /**
     * 模板变量赋值
     * @access public
     * @param mixed $name
     * @param mixed $value
     * @return void
     */
    $template->assign($name, $value = '');
    
    /**
     * 模板引擎参数赋值
     * @access public
     * @param mixed $name
     * @param mixed $value
     */
    $template->__set($name, $value);
    
    /**
     * 模板引擎配置项
     * @access public
     * @param array|string $config
     * @return void|array
     */
    $template->config($config);
    
    /**
     * 模板变量获取
     * @access public
     * @param  string $name 变量名
     * @return mixed
     */
    $template->get($name = '');
    
    /**
     * 渲染模板文件
     * @access public
     * @param string    $template 模板文件
     * @param array     $vars 模板变量
     * @param array     $config 模板参数
     * @return void
     */
    $template->fetch($template, $vars = [], $config = []);
    
    /**
     * 渲染模板内容
     * @access public
     * @param string    $content 模板内容
     * @param array     $vars 模板变量
     * @param array     $config 模板参数
     * @return void
     */
    $template->display($content, $vars = [], $config = []);
    
    /**
     * 设置布局
     * @access public
     * @param mixed     $name 布局模板名称 false 则关闭布局
     * @param string    $replace 布局模板内容替换标识
     * @return object
     */
    $template->layout($name, $replace = '');
    
    /**
     * 检查编译缓存是否有效
     * 如果无效则需要重新编译
     * @access private
     * @param string $cacheFile 缓存文件名
     * @return boolean
     */
    $this->checkCache($cacheFile);
    
    /**
     * 检查编译缓存是否存在
     * @access public
     * @param string $cacheId 缓存的id
     * @return boolean
     */
    $template->isCache($cacheId);
    
    /**
     * 编译模板文件内容
     * @access private
     * @param string    $content 模板内容
     * @param string    $cacheFile 缓存文件名
     * @return void
     */
    $this->compiler(&$content, $cacheFile);
    
    /**
     * 模板解析入口
     * 支持普通标签和TagLib解析 支持自定义标签库
     * @access public
     * @param string $content 要解析的模板内容
     * @return void
     */
    $template->parse(&$content);
    
    /**
     * 检查PHP语法
     * @access private
     * @param string $content 要解析的模板内容
     * @return void
     * @throws 	hinkException
     */
    $this->parsePhp(&$content);
    
    /**
     * 解析模板中的布局标签
     * @access private
     * @param string $content 要解析的模板内容
     * @return void
     */
    $this->parseLayout(&$content);
    
    /**
     * 解析模板中的include标签
     * @access private
     * @param  string $content 要解析的模板内容
     * @return void
     */
    $this->parseInclude(&$content);
    
    /**
     * 解析模板中的extend标签
     * @access private
     * @param  string $content 要解析的模板内容
     * @return void
     */
    $this->parseExtend(&$content);
    
    /**
     * 替换页面中的literal标签
     * @access private
     * @param  string   $content 模板内容
     * @param  boolean  $restore 是否为还原
     * @return void
     */
    $this->parseLiteral(&$content, $restore = false);
    
    /**
     * 获取模板中的block标签
     * @access private
     * @param  string   $content 模板内容
     * @param  boolean  $sort 是否排序
     * @return array
     */
    $this->parseBlock(&$content, $sort = false);
    
    /**
     * 搜索模板页面中包含的TagLib库
     * 并返回列表
     * @access private
     * @param  string $content 模板内容
     * @return array|null
     */
    $this->getIncludeTagLib(&$content);
    
    /**
     * TagLib库解析
     * @access public
     * @param  string   $tagLib 要解析的标签库
     * @param  string   $content 要解析的模板内容
     * @param  boolean  $hide 是否隐藏标签库前缀
     * @return void
     */
    $template->parseTagLib($tagLib, &$content, $hide = false);
    
    /**
     * 分析标签属性
     * @access public
     * @param  string   $str 属性字符串
     * @param  string   $name 不为空时返回指定的属性名
     * @return array
     */
    $template->parseAttr($str, $name = null);
    
    /**
     * 模板标签解析
     * 格式: {TagName:args [|content] }
     * @access private
     * @param  string $content 要解析的模板内容
     * @return void
     */
    $this->parseTag(&$content);
    
    /**
     * 模板变量解析,支持使用函数
     * 格式: {$varname|function1|function2=arg1,arg2}
     * @access public
     * @param  string $varStr 变量数据
     * @return void
     */
    $template->parseVar(&$varStr);
    
    /**
     * 对模板中使用了函数的变量进行解析
     * 格式 {$varname|function1|function2=arg1,arg2}
     * @access public
     * @param  string $varStr 变量字符串
     * @return void
     */
    $template->parseVarFunction(&$varStr);
    
    /**
     * 特殊模板变量解析
     * 格式 以 $Think. 打头的变量属于特殊模板变量
     * @access public
     * @param  array $vars 变量数组
     * @return string
     */
    $template->parseThinkVar($vars);
    
    /**
     * 分析加载的模板文件并读取内容 支持多个模板文件读取
     * @access private
     * @param  string $templateName 模板文件名
     * @return string
     */
    $this->parseTemplateName($templateName);
    
    /**
     * 解析模板文件名
     * @access private
     * @param  string $template 文件名
     * @return string|false
     */
    $this->parseTemplateFile($template);
    
    /**
     * 按标签生成正则
     * @access private
     * @param  string $tagName 标签名
     * @return string
     */
    $this->getRegex($tagName);

    Url

    /**
     * URL生成 支持路由反射
     * @param string            $url 路由地址
     * @param string|array      $vars 参数(支持数组和字符串)a=val&b=val2... ['a'=>'val1', 'b'=>'val2']
     * @param string|bool       $suffix 伪静态后缀,默认为true表示获取配置值
     * @param boolean|string    $domain 是否显示域名 或者直接传入域名
     * @return string
     */
    Url::build($url = '', $vars = '', $suffix = true, $domain = false);
    
    // 直接解析URL地址
    self::parseUrl($url, &$domain);
    {
        $request = Request::instance();
        if (0 === strpos($url, '/')) {
            // 直接作为路由地址解析
            $url = substr($url, 1);
        } elseif (false !== strpos($url, '\')) {
            // 解析到类
            $url = ltrim(str_replace('\', '/', $url), '/');
        } elseif (0 === strpos($url, '@')) {
            // 解析到控制器
            $url = substr($url, 1);
        } else {
            // 解析到 模块/控制器/操作
            $module  = $request->module();
            $domains = Route::rules('domain');
            if (true === $domain && 2 == substr_count($url, '/')) {
                $current = $request->host();
                $match   = [];
                $pos     = [];
                foreach ($domains as $key => $item) {
                    if (isset($item['[bind]']) && 0 === strpos($url, $item['[bind]'][0])) {
                        $pos[$key] = strlen($item['[bind]'][0]) + 1;
                        $match[]   = $key;
                        $module    = '';
                    }
                }
                if ($match) {
                    $domain = current($match);
                    foreach ($match as $item) {
                        if (0 === strpos($current, $item)) {
                            $domain = $item;
                        }
                    }
                    self::$bindCheck = true;
                    $url             = substr($url, $pos[$domain]);
                }
            } elseif ($domain) {
                if (isset($domains[$domain]['[bind]'][0])) {
                    $bindModule = $domains[$domain]['[bind]'][0];
                    if ($bindModule && !in_array($bindModule[0], ['\', '@'])) {
                        $module = '';
                    }
                }
            }
            $module = $module ? $module . '/' : '';
    
            $controller = Loader::parseName($request->controller());
            if ('' == $url) {
                // 空字符串输出当前的 模块/控制器/操作
                $url = $module . $controller . '/' . $request->action();
            } else {
                $path       = explode('/', $url);
                $action     = Config::get('url_convert') ? strtolower(array_pop($path)) : array_pop($path);
                $controller = empty($path) ? $controller : (Config::get('url_convert') ? Loader::parseName(array_pop($path)) : array_pop($path));
                $module     = empty($path) ? $module : array_pop($path) . '/';
                $url        = $module . $controller . '/' . $action;
            }
        }
        return $url;
    }
    
    // 检测域名
    self::parseDomain(&$url, $domain);
    // 解析URL后缀
    self::parseSuffix($suffix);
    
    // 匹配路由地址
    Url::function getRuleUrl($rule, &$vars = []);
    
    // 指定当前生成URL地址的root
    Url::function root($root);

    Validate

    /**
     * 构造函数
     * @access public
     * @param array $rules 验证规则
     * @param array $message 验证提示信息
     * @param array $field 验证字段描述信息
     */
    $validate = new Validate(array $rules = [], $message = [], $field = []);
    
    /**
     * 实例化验证
     * @access public
     * @param array     $rules 验证规则
     * @param array     $message 验证提示信息
     * @param array     $field 验证字段描述信息
     * @return Validate
     */
    Validate::make($rules = [], $message = [], $field = []);
    
    /**
     * 添加字段验证规则
     * @access protected
     * @param string|array  $name  字段名称或者规则数组
     * @param mixed         $rule  验证规则
     * @return Validate
     */
    $validate->rule($name, $rule = '');
    
    /**
     * 注册验证(类型)规则
     * @access public
     * @param string    $type  验证规则类型
     * @param mixed     $callback callback方法(或闭包)
     * @return void
     */
    Validate::extend($type, $callback = null);
    
    /**
     * 获取验证规则的默认提示信息
     * @access protected
     * @param string|array  $type  验证规则类型名称或者数组
     * @param string        $msg  验证提示信息
     * @return void
     */
    Validate::setTypeMsg($type, $msg = null);
    
    /**
     * 设置提示信息
     * @access public
     * @param string|array  $name  字段名称
     * @param string        $message 提示信息
     * @return Validate
     */
    $validate->message($name, $message = '');
    
    /**
     * 设置验证场景
     * @access public
     * @param string|array  $name  场景名或者场景设置数组
     * @param mixed         $fields 要验证的字段
     * @return Validate
     */
    $validate->scene($name, $fields = null);
    
    /**
     * 判断是否存在某个验证场景
     * @access public
     * @param string $name 场景名
     * @return bool
     */
    $validate->hasScene($name);
    
    /**
     * 设置批量验证
     * @access public
     * @param bool $batch  是否批量验证
     * @return Validate
     */
    $validate->batch($batch = true);
    
    /**
     * 数据自动验证
     * @access public
     * @param array     $data  数据
     * @param mixed     $rules  验证规则
     * @param string    $scene 验证场景
     * @return bool
     */
    $validate->check($data, $rules = [], $scene = '');
    
    /**
     * 验证单个字段规则
     * @access protected
     * @param string    $field  字段名
     * @param mixed     $value  字段值
     * @param mixed     $rules  验证规则
     * @param array     $data  数据
     * @param string    $title  字段描述
     * @param array     $msg  提示信息
     * @return mixed
     */
    $this->checkItem($field, $value, $rules, $data, $title = '', $msg = []);
    
    /**
     * 验证是否和某个字段的值一致
     * @access protected
     * @param mixed     $value 字段值
     * @param mixed     $rule  验证规则
     * @param array     $data  数据
     * @param string    $field 字段名
     * @return bool
     */
    $this->confirm($value, $rule, $data, $field = '');
    
    /**
     * 验证是否和某个字段的值是否不同
     * @access protected
     * @param mixed $value 字段值
     * @param mixed $rule  验证规则
     * @param array $data  数据
     * @return bool
     */
    $this->different($value, $rule, $data);
    
    /**
     * 验证是否大于等于某个值
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->egt($value, $rule);
    
    /**
     * 验证是否大于某个值
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->gt($value, $rule);
    
    /**
     * 验证是否小于等于某个值
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->elt($value, $rule);
    
    /**
     * 验证是否小于某个值
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->lt($value, $rule);
    
    /**
     * 验证是否等于某个值
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->eq($value, $rule);
    
    /**
     * 验证字段值是否为有效格式
     * @access protected
     * @param mixed     $value  字段值
     * @param string    $rule  验证规则
     * @param array     $data  验证数据
     * @return bool
     */
    $this->is($value, $rule, $data = []);
    
    // 判断图像类型
    $this->getImageType($image);
    
    /**
     * 验证是否为合格的域名或者IP 支持A,MX,NS,SOA,PTR,CNAME,AAAA,A6, SRV,NAPTR,TXT 或者 ANY类型
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->activeUrl($value, $rule);
    
    /**
     * 验证是否有效IP
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则 ipv4 ipv6
     * @return bool
     */
    $this->ip($value, $rule);
    
    /**
     * 验证上传文件后缀
     * @access protected
     * @param mixed     $file  上传文件
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->fileExt($file, $rule);
    
    /**
     * 验证上传文件类型
     * @access protected
     * @param mixed     $file  上传文件
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->fileMime($file, $rule);
    
    /**
     * 验证上传文件大小
     * @access protected
     * @param mixed     $file  上传文件
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->fileSize($file, $rule);
    
    /**
     * 验证图片的宽高及类型
     * @access protected
     * @param mixed     $file  上传文件
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->image($file, $rule);
    
    /**
     * 验证请求类型
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->method($value, $rule);
    
    /**
     * 验证时间和日期是否符合指定格式
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->dateFormat($value, $rule);
    
    /**
     * 验证是否唯一
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则 格式:数据表,字段名,排除ID,主键名
     * @param array     $data  数据
     * @param string    $field  验证字段名
     * @return bool
     */
    $this->unique($value, $rule, $data, $field);
    
    /**
     * 使用行为类验证
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @param array     $data  数据
     * @return mixed
     */
    $this->behavior($value, $rule, $data);
    
    /**
     * 使用filter_var方式验证
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->filter($value, $rule);
    
    /**
     * 验证某个字段等于某个值的时候必须
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @param array     $data  数据
     * @return bool
     */
    $this->requireIf($value, $rule, $data);
    
    /**
     * 通过回调方法验证某个字段是否必须
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @param array     $data  数据
     * @return bool
     */
    $this->requireCallback($value, $rule, $data);
    
    /**
     * 验证某个字段有值的情况下必须
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @param array     $data  数据
     * @return bool
     */
    $this->requireWith($value, $rule, $data);
    
    /**
     * 验证是否在范围内
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->in($value, $rule);
    
    /**
     * 验证是否不在某个范围
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->notIn($value, $rule);
    
    /**
     * between验证数据
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->between($value, $rule);
    
    /**
     * 使用notbetween验证数据
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->notBetween($value, $rule);
    
    /**
     * 验证数据长度
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->length($value, $rule);
    
    /**
     * 验证数据最大长度
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->max($value, $rule);
    
    /**
     * 验证数据最小长度
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->min($value, $rule);
    
    /**
     * 验证日期
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->after($value, $rule);
    
    /**
     * 验证日期
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->before($value, $rule);
    
    /**
     * 验证有效期
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @return bool
     */
    $this->expire($value, $rule);
    
    /**
     * 验证IP许可
     * @access protected
     * @param string    $value  字段值
     * @param mixed     $rule  验证规则
     * @return mixed
     */
    $this->allowIp($value, $rule);
    
    /**
     * 验证IP禁用
     * @access protected
     * @param string    $value  字段值
     * @param mixed     $rule  验证规则
     * @return mixed
     */
    $this->denyIp($value, $rule);
    
    /**
     * 使用正则验证数据
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则 正则规则或者预定义正则名
     * @return mixed
     */
    $this->regex($value, $rule);
    
    /**
     * 验证表单令牌
     * @access protected
     * @param mixed     $value  字段值
     * @param mixed     $rule  验证规则
     * @param array     $data  数据
     * @return bool
     */
    $this->token($value, $rule, $data);
    
    // 获取错误信息
    $validate->getError();
    
    /**
     * 获取数据值
     * @access protected
     * @param array     $data  数据
     * @param string    $key  数据标识 支持二维
     * @return mixed
     */
    $this->getDataValue($data, $key);
    
    /**
     * 获取验证规则的错误提示信息
     * @access protected
     * @param string    $attribute  字段英文名
     * @param string    $title  字段描述名
     * @param string    $type  验证规则名称
     * @param mixed     $rule  验证规则数据
     * @return string
     */
    $this->getRuleMsg($attribute, $title, $type, $rule);
    
    /**
     * 获取数据验证的场景
     * @access protected
     * @param string $scene  验证场景
     * @return array
     */
    $this->getScene($scene = '');
    
    Validate::__callStatic($method, $params);

    View

    /**
     * 构造函数
     * @access public
     * @param array $engine  模板引擎参数
     * @param array $replace  字符串替换参数
     */
    $view = New View($engine = [], $replace = []);
    
    /**
     * 初始化视图
     * @access public
     * @param array $engine  模板引擎参数
     * @param array $replace  字符串替换参数
     * @return object
     */
    View::instance($engine = [], $replace = []);
    
    /**
     * 模板变量静态赋值
     * @access public
     * @param mixed $name  变量名
     * @param mixed $value 变量值
     * @return void
     */
    View::share($name, $value = '');
    
    /**
     * 模板变量赋值
     * @access public
     * @param mixed $name  变量名
     * @param mixed $value 变量值
     * @return $this
     */
    $view->assign($name, $value = '');
    
    /**
     * 设置当前模板解析的引擎
     * @access public
     * @param array|string $options 引擎参数
     * @return $this
     */
    $view->engine($options = []);
    
    /**
     * 配置模板引擎
     * @access private
     * @param string|array  $name 参数名
     * @param mixed         $value 参数值
     * @return void
     */
    $view->config($name, $value = null);
    
    /**
     * 解析和获取模板内容 用于输出
     * @param string    $template 模板文件名或者内容
     * @param array     $vars     模板输出变量
     * @param array     $replace 替换内容
     * @param array     $config     模板参数
     * @param bool      $renderContent     是否渲染内容
     * @return string
     * @throws Exception
     */
    $view->fetch($template = '', $vars = [], $replace = [], $config = [], $renderContent = false);
    
    /**
     * 视图内容替换
     * @access public
     * @param string|array  $content 被替换内容(支持批量替换)
     * @param string        $replace    替换内容
     * @return $this
     */
    $view->replace($content, $replace = '');
    
    /**
     * 渲染内容输出
     * @access public
     * @param string $content 内容
     * @param array  $vars    模板输出变量
     * @param array  $replace 替换内容
     * @param array  $config     模板参数
     * @return mixed
     */
    $view->display($content, $vars = [], $replace = [], $config = []);
    
    /**
     * 模板变量赋值
     * @access public
     * @param string    $name  变量名
     * @param mixed     $value 变量值
     */
    $view->__set($name, $value);
    
    /**
     * 取得模板显示变量的值
     * @access protected
     * @param string $name 模板变量
     * @return mixed
     */
    $view->__get($name);
    
    /**
     * 检测模板变量是否设置
     * @access public
     * @param string $name 模板变量名
     * @return bool
     */
    $view->__isset($name);  

    感谢 : https://juejin.im/entry/5907f7f2da2f60005d10b597
    原文链接:yangweijie.github.io
  • 相关阅读:
    ubuntu 14.04安装 ruby on rails
    antVue--a-cascader级联组件使用触发loadData方法注意事项
    Canvas标签width属性和css的width属性
    " != "和" !== "
    进度条实现简易demo
    从HTML看代码组织与优化
    听着好像很牛的特效——幽灵按钮DOM
    JavaScript的面向对象编程(OOP)(三)——聚合
    JavaScript的面向对象编程(OOP)(二)——原型
    JavaScript的面向对象编程(OOP)(一)——类
  • 原文地址:https://www.cnblogs.com/xred/p/8397475.html
Copyright © 2020-2023  润新知