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"

 

posted @ 2025-02-15 11:08  刘宏缔的架构森林  阅读(133)  评论(0)    收藏  举报