$request对象特定数组的设置与更新方法

gongaiorg

可以直接在support\Request类里直接添加set方法,框架升级不会被覆盖

/**
 * 设置$request数据,自动覆盖更新
 * @param array $data
 */
function set(  array $data )
{
    $key = key($data);// 获取数组的键名
    $rawData = $this->$key ?: [];// 获取原数据
    $data = array_merge($rawData, $data[$key]);// 合并新数据
    $this->$key = $data; // 设置新数据
}

使用方法:

在需要设置更新数据的地方直接 $request->set($data);即可

这样做的好处是可以更新已有的值

587 9 5
9个评论

dj880

非常感谢,正好需要~

  • 暂无评论
liziyu

👍

  • 暂无评论
初心by

建议写一下怎么调用,不然还得研究一下

<?php

namespace app\middleware;

use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

/**
 * 处理请求数据
 */
class Prdata implements MiddlewareInterface
{

    public function process(Request $request, callable $handler): Response
    {
        $getData = $request->get();
        // 处理get数据
        if (!empty($getData)) {
            foreach ($getData as $key => $value) {
                is_string($value) && $getData[$key] = trim($value);
            }
            // 设置get数据
            request()->set([
                '_data' => [
                    'get' => $getData
                ]
            ]);
        }
        // 请求继续向洋葱芯穿越
        $response = $handler($request);
        return $response;
    }
}
  • 暂无评论

中间件中,我直接这样也行啊

public function process(Request $request, callable $next): Response
{
    $request->Webman = 'study'; //这样用
    return $next($request);
}
  • 2024-09-18

    在控制器中用 $request->Webman ; 这种方式接收

截图

截图

截图

  • 初心by 2024-09-18

    你用 request()->get() 这个获取一下

  • 初心by 2024-09-18

    可能我们的应用场景不一样吧.. 我想要的是 修改 get() post() 得到的数据,不是直接去获取对应字段

  • 2024-09-18

    这不是http传参啊,get / post当然获不到了

  • 初心by 2024-09-18

    那之前本来就可以直接赋值啊,用set函数的意义,我觉得应该就是可以修改 get、post 获取的值

s4160415

非常好用

  • 暂无评论
efnic

\Workerman\Protocols\Http\Request::__set

\Workerman\Protocols\Http\Request::__get
本身就支持给请求对象赋值。
客户端get、post过来的参数,建议不要修改。

  • efnic 25天前

    宏指令:\Illuminate\Support\Traits\Macroable
    或者根据应用与业务,给\support\Request附加特性 trait 来实现代码提示。

efnic

例如,我这个项目给请求类附加的特性有,普通用户、开放APi、商户等。
给请求类附加特性

  • shiroi 22天前

    你写的没啥问题,代码规范是对的

s4160415

上面方法 有问题 旧的请求数据都没了

以下方法不会销毁旧的数据

  /**
     * 设置$request数据,自动覆盖更新
     * @param string $method
     * @param array $data
     */
    function set(string $method, array $data)
    {
        $method = strtolower($method);
        $newData = $this->_data; // 复制原始数据
        $newMethodData = array_merge($newData[$method] ?? [], $data); // 合并特定方法的数据
        $this->_data[$method] = $newMethodData; // 更新对象数据
    }
  • 暂无评论

gongaiorg

-80
积分
0
获赞数
0
粉丝数
2022-03-18 加入
×
🔝