账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
路由拦截

路由拦截概述

phpGrace 的路由拦截是基于最终运行控制器及方法的,利用路由拦截您可以实现权限校验等各类全局或局部拦截。

实现路由拦截

1 打开拦截器 appRoute/站点或分组目录/interceptor.php;
2 编写拦截规则;

全局拦截

<?php
namespace grace\route;
use grace\routeInterceptor;
class interceptor extends routeInterceptor{

    // 不需要全局拦截的路由
    // 定义格式
    // '控制器名称/方法名称 或者 控制器名称/*'
    protected $excludeRoutes = array(
        // 如 : 排除 login 控制器
        'login/*',
    );

    // 统一拦截方法 [ 不包含 被排除的控制器及方法 ]
    public function globalInterceptor(){
        // 在此处编写您的自定义路由拦截代码
        echo '全局拦截运行<br />';
    }

}

控制器拦截

如果需要对某个具体的控制器进行拦截,在拦截器内部定义一个与控制器同名的方法即可 :

<?php
namespace grace\route;
use grace\routeInterceptor;

class interceptor extends routeInterceptor{

    // 不需要全局拦截的路由
    // 定义格式
    // '控制器名称/方法名称 或者 控制器名称/*'
    protected $excludeRoutes = array(
        // 如 : 排除 login 控制器
        'login/*',
    );

    // 统一拦截方法 [ 不包含 被排除的控制器及方法 ]
    public function globalInterceptor(){
        // 在此处编写您的自定义路由拦截代码
        echo '全局拦截运行<br />';
    }

    // 针对index控制器的拦截
    public function index(){
        echo '针对 index 控制器的拦截器<br />';
    }

}

控制器方法拦截

如果需要对某个具体的控制器的方法进行拦截,在拦截器内部定义一个 控制器+方法名称[首字母大写] 的方法即可 :

<?php 
namespace grace\route;
use grace\routeInterceptor;

class interceptor extends routeInterceptor{

    // 不需要全局拦截的路由
    // 定义格式
    // '控制器名称/方法名称 或者 控制器名称/*'
    protected $excludeRoutes = array(
        // 如 : 排除 login 控制器
        'login/*',
    );

    // 统一拦截方法 [ 不包含 被排除的控制器及方法 ]
    public function globalInterceptor(){
        // 在此处编写您的自定义路由拦截代码
        echo '全局拦截运行<br />';
    }

    // 针对index控制器的拦截
    public function index(){
        echo '针对 index 控制器的拦截器<br />';
    }

    // 针对具体控制器具体方法的拦截
    public function indexTest(){
        echo '针对 index 控制器 test 方法的拦截器运行<br />';
    }

}

如何“拦截”?

在拦截器内完成拦截校验,一旦满足拦截条件,您可以使用 抛出异常、跳转页面、等方式实现拦截后的具体业务,建议您使用 exit 结尾,拦截后终止程序继续运行。