路由类 Gene\Router

  • 介绍

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

  • 实例化

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

    参数:

    参数 类型 是否必填 注释
    keyName String 路由缓存标志

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

    实例:

    //实例化路由对象
    $router = new Gene\Router();
  • 设置路由系列方法

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

    参数:

    参数 类型 是否必填 注释
    routerPath String 路由路径,支持参数。
    callback String or Closure 回调方法,支持类方法和匿名函数。
    hook String 路由钩子,设置钩子、设置全局钩子。

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

    实例1:路由设置类方法

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

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

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

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

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

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

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

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

    实例4:路由设置钩子

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

    //实例化路由对象
    $router = new Gene\Router();
    //路由设置钩子
    $router->get("/admin/index", Controllers_Admin_Index@index, "adminHook"); /* 定义后台管理员权限检查钩子 */
    $router->hook("adminHook", function () {
    if (!isset($_SESSION['admin']['user_id'])) {
    die('没有操作权限!');
    }
    });
  • hook

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

    参数:

    参数 类型 是否必填 注释
    hookName String 钩子名称。
    callback String or Closure 回调方法,支持类方法和匿名函数。

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

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

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

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

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

    实例3:定义自定义钩子

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

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

    参数:

    参数 类型 是否必填 注释
    name String 分组名称,如果参数不为空就是打开分组,为空就是关闭分组;

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

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    //路由分组:将后台的用户管理放在一个分组里面
    $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();
  • error

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

    参数:

    参数 类型 是否必填 注释
    hookName String 钩子名称。
    callback String or Closure 回调方法,支持类方法和匿名函数。

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

    实例:

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

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

    参数:

    返回值: String。

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    $time = $router->getTime();
  • getEvent

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

    参数:

    返回值: array。

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    $event = $router->getEvent();
  • getTree

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

    参数:

    返回值: array。

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    $tree = $router->getTree();
  • delEvent

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

    参数:

    参数 类型 是否必填 注释
    keyName String 缓存名称, 默认删除当前项目。

    返回值: boolean。

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    $result = $router->delEvent();
  • delTree

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

    参数:

    参数 类型 是否必填 注释
    keyName String 缓存名称, 默认删除当前项目。

    返回值: boolean。

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    $result = $router->delTree();
  • clear

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

    参数:

    参数 类型 是否必填 注释
    keyName String 缓存名称, 默认删除当前项目。

    返回值: boolean。

    实例:

    //实例化路由对象
    $router = new Gene\Router();
    $result = $router->clear();
  • getRouter

    获取路由对象。

    参数:

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

    实例:

    //获取实例化路由对象
    $router = Gene\Router::getRouter();
  • run

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

    参数:

    参数 类型 是否必填 注释
    method String 请求方式(默认自动取访问方式:get、post等)
    path String 请求路径(默认自动取访问路径:比如/admin/login)

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

    实例1:web应用

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

    实例2:cli应用

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

    运行已定义的error。

    参数:

    参数 类型 是否必填 注释
    errorName String error名称。

    返回值: boolean。

    实例:

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

gene框架文档 - 路由类 gene_router的更多相关文章

  1. gene框架文档 - 概述

    欢迎使用Gene框架 最新版本:V1.2.2 开源地址:https://github.com/sasou/php-gene 作者:sasou 文档地址:http://php-gene.com/doc ...

  2. MvcPager帮助文档 — PagerOptions 类

    http://www.webdiyer.com/mvcpager2/docs/pageroptions/ MvcPager帮助文档 — PagerOptions 类 表示包含MvcPager分页控件相 ...

  3. Mybatis 框架文档 超具体笔记

    1      Mybatis入门 1.1    单独使用jdbc编程问题总结 1.1.1  jdbc程序 Public static void main(String[] args) { Connec ...

  4. selenium浏览器自动化测试框架文档(修正版)

    写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道怎么做,做的还不够好:有的团队还 ...

  5. 【ElasticSearch】文档路由的原理

    ElasticSearch集群环境下新增文档如何确认该文档被分配到哪个分片中? 路由算法: ⾸先这肯定不会是随机的,否则将来要获取⽂档的时候我们就不知道从何处寻找了.实际上,这个过程是根据下⾯这个公式 ...

  6. XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)

    以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  7. 关于XML文档操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  8. java WordUtils word文档工具类

    package com.sicdt.library.core.utils; import java.io.ByteArrayOutputStream; import java.io.IOExcepti ...

  9. 利用NPOI导出Word文档帮助类

    /// <summary> /// NPOI操作Word /// </summary> public class NpoiWordHelper { /// <summar ...

随机推荐

  1. ARCGIS10.1 GeoDatabase深入理解:客户端连接与退出地理数据库时系统表的初始化

    平台软件:ARCIGS10.1 ,SQL Server2008R2 目的:了解客户端在连接arcgis 空间地理数据库后,地理数据库会做些什么样的初始化工作 准备工作: 1.准备好数据库日志文件查看工 ...

  2. Hadoop - Azkaban 作业调度

    1.概述 在调度 Hadoop 的相关作业时,有以下几种方式: 基于 Linux 系统级别的 Crontab. Java 应用级别的 Quartz. 第三方的调度系统. 自行开发 Hadoop 应用调 ...

  3. CHECK MEMBER TYPE

    检查类里是否存在某种类型的几种方法,以检查xxx类型为例:方法1: template<class T> class has_member_type_Type { ]; }; templat ...

  4. redhat下mysql安装与使用

    1.安装 (1)查看是否安装 yum list installed mysql* (2)查看现有安装包 yum list mysql* (3)安装mysql服务器端 yum install mysql ...

  5. EclEmma的介绍、安装与使用

    p{line-height: 200%}   1. EclEmma的介绍   EclEmma是一个开源的软件测试工具,可以在编码过程中查看代码调用情况.也可以检测单覆盖率.   2. Eclipse下 ...

  6. Hadoop学习笔记(老版本,YARN之前),MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系

    一.基本概念 在MapReduce中,一个准备提交执行的应用程序称为“作业(job)”,而从一个作业划分出的运行于各个计算节点的工作单元称为“任务(task)”.此外,Hadoop提供的分布式文件系统 ...

  7. win10下LPT并口打印失败和POS打印机的钱箱不能打开,win10的坑

    最近在弄一个收银软件,因为使用到了触摸屏,该PC出厂安装的是老掉牙的XP.SSD固态硬盘,装XP实在是太浪费了.然后尝试了WIN7发现不能激活,然后试win8.1发现比较满意终于觉得配得上触摸屏了,但 ...

  8. Python Shell 解释器下使用Django Model

    sys.path.append('E:/Projects/DjangoProjects/myFirstSite') os.environ.setdefault('DJANGO_SETTINGS_MOD ...

  9. Android studio动态调试smali

    前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会.   0x01 ...

  10. 固态硬盘寿命实测让你直观SSD寿命!--转

    近年来,高端笔记本及系列上网本越来越多的采用固态硬盘来提升整机性能,尽管众所周知固态硬盘除 了在正常的使用中带来更快速度的体验外,还具有零噪音.不怕震动.低功耗等优点,但大家对固态硬盘的寿命问题的担忧 ...