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 结尾,拦截后终止程序继续运行。