Skip to content

Latest commit

 

History

History
executable file
·
57 lines (38 loc) · 2.1 KB

Middleware.router.md

File metadata and controls

executable file
·
57 lines (38 loc) · 2.1 KB

路由级的中间件

路由级的中间件是指的是中间件的执行需要匹配当前的请求,因此他只在匹配路由的时候才会执行;可以看做路由中间件为一个特殊的请求处理函数。

这里一定要区分应用级中间件与路由级中间件。

应用级的中间件是middleware的子类,他的执行有效范围为整个应用,因此他不区分路由

路由级的中间件需要传递一个绑定的路由(/,/user),和一个callable如function(){},或者一个返回callable的方法,而且这个匿名函数必须要接受3个参数,$req,$res,$next

使用

路由中间件可以使用 using 注册调用:$vitex->using('/',function($req,$res,$next){})

还可以通过 请求注册时同步注册调用: $vitex->using('/',function($req,$res,$next){},function($req,$res){}); 此种方式最后一个callable为请求处理函数,中间的都为路由中间件,注册的顺序为参数顺序注册。

路由中间件与请求处理函数一样使用同样的匹配和调用方式;因此,他们的执行是相互关联的,执行的顺序总是与注册顺序一致

每一个中间件函数都包含3个参数, ($req,$res,$next):

  • $req object Request对象当前的实例
  • $res object Response对象当前的实例
  • $next callable 一个可执行的函数,此函数的作用是 继续匹配

$next详解:

路由匹配总是会按照注册顺序来执行,当匹配到第一个匹配的注册时会调用他的处理函数,
此处理函数执行过程中可以使用 `$next()` 来继续执行匹配,
如果在中间件中不使用`$next()` 那么就会使得请求结束,不会继续匹配其他处理函数。  

DEMO:

$vitex->using('/',function($req,$res,$next){  
	echo 'run router middleware';  
	$next();//通过路由中间件,继续执行下一次匹配  
	//如果不掉用该方法则不会执行输出hello world  
})  
->get('/',function($req,$res){  
	echo 'hello world!!';  
});  

上传demo:

$vite->using('/',function($req,$res,$next){
  
});