webman 控制器钩子 beforeAction 与 afterAction

谷梁振
2023-12-01

在传统框架中,每个请求都会实例化一次控制器,所以很多开发者__construct()方法中做一些请求前的准备工作。

而webman由于控制器常驻内存,无法在__construct()里做这些工作,不过webman提供了更好的解决方案beforeAction() afterAction(),它不仅让开发者可以介入到请求前的流程中,而且还可以介入到请求后的处理流程中。

安装action-hook插件

composer require webman/action-hook

注意
插件需要webman>=1.2,如果你的版本低于1.2可以参考这里手动配置action-hook

 

beforeAction说明:

  • 在当前控制器被执行前调用
  • 框架会传递一个Request对象给beforeAction,开发者可以从中获得用户输入
  • 如需终止执行当前控制器,则只需要在beforeAction里返回一个Response对象,比如return redirect('/user/login');
  • 无需终止执行当前控制器时,不要返回任何数据

afterAction说明:

  • 在当前控制器被执行后调用
  • 框架会传递Request对象以及Response对象给afterAction,开发者可以从中获得用户输入以及控制器执行后返回的响应结果
  • 开发者可以通过$response->rawBody()获得响应内容
  • 开发者可以通过$response->getHeader()获得响应的header头
  • 开发者可以通过$response->getStatusCode()获得响应的http状态码
  • 开发者可利用$response->withBody() $response->header() $response->withStatus()串改响应,也可以创建并返回一个新的Response对象替代原响应

提示
你可以创建一个控制器基类,这个基类实现beforeAction() afterAction()方法。其他控制器继承这个基类,这样就不必每个控制器都实现一遍beforeAction()`afterAction()方法。

 类似资料: