hyperf: 中间件给controller传递参数
一,官方文档
https://hyperf.wiki/3.1/#/zh-cn/controller?id=%e9%81%bf%e5%85%8d%e5%8d%8f%e7%a8%8b%e9%97%b4%e6%95%b0%e6%8d%ae%e6%b7%b7%e6%b7%86
二,代码例子:
1,中间件
<?php
declare(strict_types=1);
namespace App\Middleware;
use Hyperf\Context\Context;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use App\Log\AccessLog;
class AccesslogMiddleware implements MiddlewareInterface
{
protected AccessLog $loggerFile;
public function __construct(protected ContainerInterface $container)
{
$this->loggerFile = new AccessLog();
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
//用协程上下文(Context)设置参数,然后从controller接收
Context::set('username', 'liushifu');
Context::set('token', '12345qwert');
echo '这里是请求穿越阶段,也就是请求处理前';
//开始时间
$startTime = microtime(true);
$response = $handler->handle($request); // 继续向洋葱芯穿越,直至执行控制器得到响应
echo '这里是响应穿出阶段,也就是请求处理后';
//响应时间
$endTime = microtime(true);
//共计用时
$costTime = $endTime - $startTime;
return $response;
}
}
2,controller
public function imagedetail(RequestInterface $request, ResponseInterface $response) {
$nickname = $request->input("nickname");
echo "验证通过,nickname:".$nickname."\n";
//得到middleware传递的参数
$username = Context::get('username');
$token = Context::get('token');
var_dump("username来自middleware:");
var_dump($username);
var_dump("token来自middleware:");
var_dump($token);
$data = [
'nickname' => $nickname,
];
return Result::Success($data);
}
三,测试效果:
string(25) "username来自middleware:"
string(8) "liushifu"
string(22) "token来自middleware:"
string(10) "12345qwert"
浙公网安备 33010602011771号