gene框架文书档案

作者: 计算机网络  发布:2019-11-09

gene框架文档,gene框架

路由类 GeneRouter

路由类 GeneRouter

- 介绍

Gene\Router 是gene框架的核心类之一,本框架区别于其他常见框架的最大地方就是独特、强大、简单的路由定义等。  
路由强大灵活,支持回调、类方法;支持rest、http请求方式(get,post,put,patch,delete,trace,connect,options,head)等;
支持定义全局、局部钩子,每个方法可以定义清理全局钩子等。

- 介绍

Gene\Router 是gene框架的核心类之一,本框架区别于其他常见框架的最大地方就是独特、强大、简单的路由定义等。  
路由强大灵活,支持回调、类方法;支持rest、http请求方式(get,post,put,patch,delete,trace,connect,options,head)等;
支持定义全局、局部钩子,每个方法可以定义清理全局钩子等。

- 实例化

初始化路由,传递缓存key,将会把路由配置缓存起来。  
Gene\Router如果作为gene_application应用的路由配置使用,可以不传递缓存key,自动沿用应用的标志名称;如果作为一个独立的功能使用,则需要传递缓存key,区别不同的路由配置。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>路由缓存标志</td>
</tr>
</tbody>
</table>

> *返回值*: Gene\Router实例化对象本身。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();

- 实例化

初始化路由,传递缓存key,将会把路由配置缓存起来。  
Gene\Router如果作为gene_application应用的路由配置使用,可以不传递缓存key,自动沿用应用的标志名称;如果作为一个独立的功能使用,则需要传递缓存key,区别不同的路由配置。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>路由缓存标志</td>
</tr>
</tbody>
</table>

    返回值: GeneRouter实例化对象本身。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();

- 设置路由系列方法

方法:get,post,put,patch,delete,trace,connect,options,head;  
设置路由的方法,涵盖rest操作的基本方法。
路由路径支持参数,回调方法支持类方法和匿名函数,钩子定义路由钩子及全局钩子。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>routerPath</td>
<td>String</td>
<td>是</td>
<td>路由路径,支持参数。</td>
</tr>
<tr class="even">
<td>callback</td>
<td>String or Closure</td>
<td>是</td>
<td>回调方法,支持类方法和匿名函数。</td>
</tr>
<tr class="odd">
<td>hook</td>
<td>String</td>
<td>否</td>
<td>路由钩子,设置钩子、设置全局钩子。</td>
</tr>
</tbody>
</table>

> *返回值*: Gene\Router实例化对象本身。

### 实例1:路由设置类方法

访问路由地址,将会调用设置的类的方法。
类方法的格式:classNanme@methodName.  
比如: index@list;

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置类方法
    $router->get("/","Controllers_Index@index");

### 实例2:路由设置匿名函数

访问路由地址,将会调用设置的匿名函数。

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置匿名函数
    $router->get("/",function(){
        echo "index";
    });

### 实例3:路由设置支持参数

访问路由地址,将会把定义的路由参数传递给回调方法里面。  
参数的格式:冒号后面加参数名。  
比如:":id"。  
回调方法里面获取参数:路由里面的参数(可能有多个),作为一个数组传递给回调方法,回调方法里面可以直接获取。

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置支持参数
    $router->get("/news/:id.html",function($params){
        echo "id:" , $params['id'];
    });

### 实例4:路由设置钩子

路由钩子可以设置当前路由的钩子,也可以设置全局钩子,或者禁用全局钩子。  
钩子的格式:curHookName@globalHook。  
globalHook参数列表: clearBefore 禁用前置全局钩子  
clearBefore 禁用后置全局钩子  
clearAll 禁用前置、后置全局钩子  
注意:路由里面设置钩子过后,需要调用钩子定义方法定义需要的钩子。

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置钩子
    $router->get("/admin/index", Controllers_Admin_Index@index, "adminHook");

    /*  定义后台管理员权限检查钩子 */
    $router->hook("adminHook", function () {
        if (!isset($_SESSION['admin']['user_id'])) {
            die('没有操作权限!');
        }
    });

- 设置路由系列方法

方法:get,post,put,patch,delete,trace,connect,options,head;  
设置路由的方法,涵盖rest操作的基本方法。
路由路径支持参数,回调方法支持类方法和匿名函数,钩子定义路由钩子及全局钩子。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>routerPath</td>
<td>String</td>
<td>是</td>
<td>路由路径,支持参数。</td>
</tr>
<tr class="even">
<td>callback</td>
<td>String or Closure</td>
<td>是</td>
<td>回调方法,支持类方法和匿名函数。</td>
</tr>
<tr class="odd">
<td>hook</td>
<td>String</td>
<td>否</td>
<td>路由钩子,设置钩子、设置全局钩子。</td>
</tr>
</tbody>
</table>

    返回值: GeneRouter实例化对象本身。

### 实例1:路由设置类方法

访问路由地址,将会调用设置的类的方法。
类方法的格式:[[email protected]](http://www.bkjia.com/cdn-cgi/l/email-protection)  
比如:
[[email protected]](http://www.bkjia.com/cdn-cgi/l/email-protection);

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置类方法
    $router->get("/","[email protected]");

### 实例2:路由设置匿名函数

访问路由地址,将会调用设置的匿名函数。

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置匿名函数
    $router->get("/",function(){
     echo "index";
    });

### 实例3:路由设置支持参数

访问路由地址,将会把定义的路由参数传递给回调方法里面。  
参数的格式:冒号后面加参数名。  
比如:":id"。  
回调方法里面获取参数:路由里面的参数(可能有多个),作为一个数组传递给回调方法,回调方法里面可以直接获取。

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置支持参数
    $router->get("/news/:id.html",function($params){
     echo "id:" , $params['id'];
    });

### 实例4:路由设置钩子

路由钩子可以设置当前路由的钩子,也可以设置全局钩子,或者禁用全局钩子。  
钩子的格式:[[email protected]](http://www.bkjia.com/cdn-cgi/l/email-protection)。  
globalHook参数列表: clearBefore 禁用前置全局钩子  
clearBefore 禁用后置全局钩子  
clearAll 禁用前置、后置全局钩子  
注意:路由里面设置钩子过后,需要调用钩子定义方法定义需要的钩子。

    //实例化路由对象
    $router = new GeneRouter();
    //路由设置钩子
    $router->get("/admin/index", [email protected], "adminHook");

    /*  定义后台管理员权限检查钩子 */
    $router->hook("adminHook", function () {
        if (!isset($_SESSION['admin']['user_id'])) {
            die('没有操作权限!');
        }
    });

- hook

定义钩子,可以自定义钩子名称(before、after除外)。  
before:默认前置全局钩子;  
after:默认后置全局钩子;  
全局钩子定义后默认都会执行,除非路由定义里面声明排除:  
比如排除前置全局钩子:@clearBefore;

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>hookName</td>
<td>String</td>
<td>是</td>
<td>钩子名称。</td>
</tr>
<tr class="even">
<td>callback</td>
<td>String or Closure</td>
<td>是</td>
<td>回调方法,支持类方法和匿名函数。</td>
</tr>
</tbody>
</table>

> *返回值*: Gene\Router实例化对象本身。

### 实例1:定义前置全局钩子

    //实例化路由对象
    $router = new GeneRouter();
    //定义前置全局钩子
    $router->hook("before", function(){
        echo " before ";
    });

### 实例2:定义后置全局钩子

    //实例化路由对象
    $router = new GeneRouter();
    //定义后置全局钩子
    $router->hook("after", function($params){
        echo " after ";
        if(is_array($params))var_dump($params);
    });

### 实例3:定义自定义钩子

    //实例化路由对象
    $router = new GeneRouter();
    //定义自定义钩子
    $router ->hook("webCheck", function () {
        isset($_SESSION) || session_start();
        if (!isset($_SESSION['user']['user_id'])) {
            header('/login.html', 302);
            die;
        }
    });

- hook

定义钩子,可以自定义钩子名称(before、after除外)。  
before:默认前置全局钩子;  
after:默认后置全局钩子;  
全局钩子定义后默认都会执行,除非路由定义里面声明排除:  
比如排除前置全局钩子:@clearBefore;

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>hookName</td>
<td>String</td>
<td>是</td>
<td>钩子名称。</td>
</tr>
<tr class="even">
<td>callback</td>
<td>String or Closure</td>
<td>是</td>
<td>回调方法,支持类方法和匿名函数。</td>
</tr>
</tbody>
</table>

    返回值: GeneRouter实例化对象本身。

### 实例1:定义前置全局钩子

    //实例化路由对象
    $router = new GeneRouter();
    //定义前置全局钩子
    $router->hook("before", function(){
     echo " before ";
    });

### 实例2:定义后置全局钩子

    //实例化路由对象
    $router = new GeneRouter();
    //定义后置全局钩子
    $router->hook("after", function($params){
     echo " after ";
     if(is_array($params))var_dump($params);
    });

### 实例3:定义自定义钩子

    //实例化路由对象
    $router = new GeneRouter();
    //定义自定义钩子
    $router ->hook("webCheck", function () {
        isset($_SESSION) || session_start();
        if (!isset($_SESSION['user']['user_id'])) {
            header('/login.html', 302);
            die;
        }
    });

- group

路由分组方法。  
如果有多个路由定义公用了共同的前缀,就可以使用group方法定义前缀。  
group方法必须成对使用,形成闭环。 其他类似功能方法:prefix。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>name</td>
<td>String</td>
<td>否</td>
<td>分组名称,如果参数不为空就是打开分组,为空就是关闭分组;</td>
</tr>
</tbody>
</table>

> *返回值*: Gene\Router实例化对象本身。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    //路由分组:将后台的用户管理放在一个分组里面
    $router
    ->group("/admin/user")
        ->get("/add", "Controllers_Admin_User@add", "adminAuth@clearAll")
        ->post("/addPost", "Controllers_Admin_User@addPost", "adminAuth@clearBefore")
        ->get("/edit/:id", "Controllers_Admin_User@edit", "adminAuth@clearAll")
        ->post("/editPost", "Controllers_Admin_User@editPost", "adminAuth@clearBefore")
        ->get("/del/:id", "Controllers_Admin_User@del", "adminAuth@clearBefore")
    ->group();

- group

路由分组方法。  
如果有多个路由定义公用了共同的前缀,就可以使用group方法定义前缀。  
group方法必须成对使用,形成闭环。 其他类似功能方法:prefix。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>name</td>
<td>String</td>
<td>否</td>
<td>分组名称,如果参数不为空就是打开分组,为空就是关闭分组;</td>
</tr>
</tbody>
</table>

    返回值: GeneRouter实例化对象本身。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    //路由分组:将后台的用户管理放在一个分组里面
    $router
    ->group("/admin/user")
        ->get("/add", "[email protected]", "[email protected]")
        ->post("/addPost", "[email protected]", "[email protected]")
        ->get("/edit/:id", "[email protected]", "[email protected]")
        ->post("/editPost", "[email protected]", "[email protected]")
        ->get("/del/:id", "[email protected]", "[email protected]")
    ->group();

- error

定义路由错误处理。  
默认内置了401处理钩子,如果定义了401错误,路由处理失败会自动调用。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>hookName</td>
<td>String</td>
<td>是</td>
<td>钩子名称。</td>
</tr>
<tr class="even">
<td>callback</td>
<td>String or Closure</td>
<td>是</td>
<td>回调方法,支持类方法和匿名函数。</td>
</tr>
</tbody>
</table>

> *返回值*: Gene\Router实例化对象本身。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    //定义401
    $router->error(401, function () {
            echo " 401 ";
    });

- error

定义路由错误处理。  
默认内置了401处理钩子,如果定义了401错误,路由处理失败会自动调用。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>hookName</td>
<td>String</td>
<td>是</td>
<td>钩子名称。</td>
</tr>
<tr class="even">
<td>callback</td>
<td>String or Closure</td>
<td>是</td>
<td>回调方法,支持类方法和匿名函数。</td>
</tr>
</tbody>
</table>

    返回值: GeneRouter实例化对象本身。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    //定义401
    $router->error(401, function () {
            echo " 401 ";
    });

- getTime

获取当前路由配置的缓存时间。

### 参数:

无

> *返回值*: String。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $time = $router->getTime();

- getTime

获取当前路由配置的缓存时间。

### 参数:

无

    返回值: String。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $time = $router->getTime();

- getEvent

获取当前路由缓存的事件。

### 参数:

无

> *返回值*: array。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $event = $router->getEvent();

- getEvent

获取当前路由缓存的事件。

### 参数:

无

    返回值: array。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $event = $router->getEvent();

- getTree

获取当前路由缓存的路由定义。

### 参数:

无

> *返回值*: array。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $tree = $router->getTree();

- getTree

获取当前路由缓存的路由定义。

### 参数:

无

    返回值: array。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $tree = $router->getTree();

- delEvent

删除当前路由缓存的时间。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>缓存名称, 默认删除当前项目。</td>
</tr>
</tbody>
</table>

> *返回值*: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->delEvent();

- delEvent

删除当前路由缓存的时间。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>缓存名称, 默认删除当前项目。</td>
</tr>
</tbody>
</table>

    返回值: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->delEvent();

- delTree

删除当前路由缓存的路由定义。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>缓存名称, 默认删除当前项目。</td>
</tr>
</tbody>
</table>

> *返回值*: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->delTree();

- delTree

删除当前路由缓存的路由定义。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>缓存名称, 默认删除当前项目。</td>
</tr>
</tbody>
</table>

    返回值: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->delTree();

- clear

清空当前路由缓存的路由定义和事件。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>缓存名称, 默认删除当前项目。</td>
</tr>
</tbody>
</table>

> *返回值*: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->clear();

- clear

清空当前路由缓存的路由定义和事件。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>keyName</td>
<td>String</td>
<td>否</td>
<td>缓存名称, 默认删除当前项目。</td>
</tr>
</tbody>
</table>

    返回值: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->clear();

- getRouter

获取路由对象。

### 参数:

无

> *返回值*: Gene\Router实例化对象本身。

### 实例:

    //获取实例化路由对象
    $router = GeneRouter::getRouter();

- getRouter

获取路由对象。

### 参数:

无

    返回值: GeneRouter实例化对象本身。

### 实例:

    //获取实例化路由对象
    $router = GeneRouter::getRouter();

- run

该方法执行后会运行路由定义。默认web应用可以不传参数,如果是cli方式下访问或者执行任务,则需要传递参数。  
前面gene_application里面也有run方法,其实是调用的Gene\Router里面的run。  
两者的区别是:
gene_application里面封装了配置加载更新的逻辑,不修改是不会重复加载的,实现了高效率。  
Gene\Router里面没有处理缓存判断,如果单独使用Gene\Router模块的话,用户需要使用getTime方法获取已缓存时间,进行判断处理。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>method</td>
<td>String</td>
<td>否</td>
<td>请求方式(默认自动取访问方式:get、post等)</td>
</tr>
<tr class="even">
<td>path</td>
<td>String</td>
<td>否</td>
<td>请求路径(默认自动取访问路径:比如/admin/login)</td>
</tr>
</tbody>
</table>

> *返回值*: Gene\Router实例化对象本身。

### 实例1:web应用

    //实例化路由对象
    $router = new GeneRouter();
    //配置路由
    $router->clear()
        ->get("/",function(){
            echo "index";
        })
        ->run();

### 实例2:cli应用

    //实例化路由对象
    $router = new GeneRouter();
    //配置路由
    $router->clear()
        ->get("/",function(){
            echo "index";
        })
        ->run('get', '/admin/task')

- run

该方法执行后会运行路由定义。默认web应用可以不传参数,如果是cli方式下访问或者执行任务,则需要传递参数。  
前面gene_application里面也有run方法,其实是调用的Gene\Router里面的run。  
两者的区别是:
gene_application里面封装了配置加载更新的逻辑,不修改是不会重复加载的,实现了高效率。  
Gene\Router里面没有处理缓存判断,如果单独使用Gene\Router模块的话,用户需要使用getTime方法获取已缓存时间,进行判断处理。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>method</td>
<td>String</td>
<td>否</td>
<td>请求方式(默认自动取访问方式:get、post等)</td>
</tr>
<tr class="even">
<td>path</td>
<td>String</td>
<td>否</td>
<td>请求路径(默认自动取访问路径:比如/admin/login)</td>
</tr>
</tbody>
</table>

    返回值: GeneRouter实例化对象本身。

### 实例1:web应用

    //实例化路由对象
    $router = new GeneRouter();
    //配置路由
    $router->clear()
     ->get("/",function(){
      echo "index";
     })
        ->run();

### 实例2:cli应用

    //实例化路由对象
    $router = new GeneRouter();
    //配置路由
    $router->clear()
     ->get("/",function(){
      echo "index";
     })
        ->run('get', '/admin/task')

- runError

运行已定义的error。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>errorName</td>
<td>String</td>
<td>是</td>
<td>error名称。</td>
</tr>
</tbody>
</table>

> *返回值*: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->runError("401");

- runError

运行已定义的error。

### 参数:

<table>
<thead>
<tr class="header">
<th>参数</th>
<th>类型</th>
<th>是否必填</th>
<th>注释</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>errorName</td>
<td>String</td>
<td>是</td>
<td>error名称。</td>
</tr>
</tbody>
</table>

    返回值: boolean。

### 实例:

    //实例化路由对象
    $router = new GeneRouter();
    $result = $router->runError("401");

路由类 GeneRouter 介绍 GeneRouter是gene框架的核心类之一,本框架区别于其他常见框架的最大地方就是独特、强大、简...

本文由今晚开什么码发布于计算机网络,转载请注明出处:gene框架文书档案

关键词: