From 50f06e6a4f5affbc1cd0f3be3017ac0efbc35cf4 Mon Sep 17 00:00:00 2001 From: sunxyw <31698606+sunxyw@users.noreply.github.com> Date: Sat, 26 Mar 2022 22:46:24 +0800 Subject: [PATCH] add middleware params docs (#78) --- docs/event/middleware.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/event/middleware.md b/docs/event/middleware.md index a97fc70a..04f487a6 100644 --- a/docs/event/middleware.md +++ b/docs/event/middleware.md @@ -165,6 +165,32 @@ public function onThrowing(?Exception $e) { `ctx()` 为获取当前协程空间绑定的 `request` 和 `response` 对象。 +## 中间件参数 + +中间件也可以接收额外的参数。例如,你需要在执行对应操作前验证对方是否具有指定的权限,你可以建立一个 `EnsureUserHasPermission` 中间件,并接收权限名称作为参数。 + +中间件参数可以在中间件中使用 `$this->middleware->params` 获取: + +```php +#[MiddlewareClass('has_permission')] +class EnsureUserHasPermission implement MiddlewareInterface +{ + #[OnBefore] + public function handle() + { + return $user->hasPermission($this->middleware->params[0]); + } +} +``` + +你可以直接在中间件注解中向中间件传递参数: + +```php +#[Middleware('has_permission', ['can_execute_command'])] +public function doSomething() +{ +``` + ## 中间件加载错误处理策略 中间件在某些情况下可能会产生普通 PHP 异常以外的异常,不能被框架的正常错误流程捕获,所以这里额外说明了中间件异常处理的几种策略。