You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建带纯文本请求体的Laravel Request实例

问题:如何创建带纯文本请求体的Laravel Request实例?

现有FakeController控制器的check方法需要接收JSON与纯文本请求,代码如下:

public function check(Request $request, int $twin): mixed {
    echo "twin = " . $twin . PHP_EOL;
    echo "request = " . print_r($request, true) . PHP_EOL;
    return null;
}

使用JSON调用该方法时:

app(FakeController::class)->check(new Request($json), 123);

可成功执行并输出预期数据。但尝试用纯文本调用时:

$message = 'some text';
app(FakeController::class)->check(new Request($message), 123);

check方法无法正常获取文本内容——直接将字符串传入Request构造函数生成的实例几乎为空,未包含文本内容。需求是创建带纯文本请求体的Request实例,且不使用多用于外部调用的HttpClient。


解决方法

Laravel的Request构造函数第一个参数接收的是查询参数/表单数据,并非请求体内容。要创建带纯文本请求体的实例,需手动设置请求体内容和对应请求头:

方法一:使用Request::create()静态方法

这是官方推荐的创建请求实例的方式,可直接指定请求体和头信息:

$message = 'some text';
// 创建Request实例
$request = Request::create(
    '/fake/check', // 路由路径,内部调用时可随意填写
    'POST', // 请求方法,根据接口实际定义选择GET/POST等
    [], // URL查询参数
    [], // Cookie数据
    [], // 文件上传数据
    ['CONTENT_TYPE' => 'text/plain'], // 请求头,指定纯文本类型
    $message // 纯文本请求体内容
);

// 调用控制器方法
app(FakeController::class)->check($request, 123);

方法二:手动实例化并设置内容

若需手动构造Request对象,可通过setContent()方法设置请求体,并指定Content-Type头:

$message = 'some text';
$request = new Request();
// 设置纯文本请求体内容
$request->setContent($message);
// 设置请求头为纯文本类型
$request->headers->set('Content-Type', 'text/plain');

// 调用控制器方法
app(FakeController::class)->check($request, 123);

控制器中获取纯文本内容

纯文本请求体不会被Laravel自动解析为输入参数,需通过getContent()方法获取:

public function check(Request $request, int $twin): mixed {
    echo "twin = " . $twin . PHP_EOL;
    // 获取纯文本请求体
    echo "request body: " . $request->getContent() . PHP_EOL;
    return null;
}

内容的提问来源于stack exchange,提问作者vbulash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:02:40