gpt4 book ai didi

Laravel HTTP 测试和请求属性

转载 作者:行者123 更新时间:2023-11-28 21:38:21 25 4
gpt4 key购买 nike

在我的应用程序中,我向 HTTP 请求添加了属性,以便稍后使用。我的应用程序是一个多域应用程序(.co.uk、.dk、.de)。我在 RouteServiceProvider 中找出域并将检测到的语言添加到 HTTP 请求中,这样我就可以根据语言和其他一些东西加载数据。我直接在 RouteServiceProvider 中找到并添加网站:

$website = Website::where('domain', '=', request()->getHttpHost())->first();
request()->attributes->add(['website' => $website]);

然后在我的 Controller 或其他任何地方我只需要查询请求

if (!$request->attributes->has('website')) {
\Log::error('Abort HTTP request: invalid website: ' . request()->getHttpHost());
abort('500');
}
$language = $request->attributes->get('website')->language();

当测试我的应用程序时,代码正常执行(在 RouteServiceProvider 中找到网站)但随后它在 Controller 中中断:

testing.ERROR: Abort HTTP request: invalid website

查看属性时,数据在 Controller 中为空,但在 RouteServiceProvider 中不为空:

dump($request->attributes); // in RouteServiceProvider.php
Symfony\Component\HttpFoundation\ParameterBag {
#parameters: array:1 [
"website" => ...

dump($request->attributes); // in controller
Symfony\Component\HttpFoundation\ParameterBag {
#parameters: []
}

看起来controller中的request对象已经不一样了。倾倒时:

dump(['RouteServiceProvider' => request()]);

我得到:"RouteServiceProvider"=> Illuminate\Http\Request {#385在 Controller 中:

dump(['Controller' => request()]);

"Controller"=> Illuminate\Http\Request {#9379

我该如何解决这个问题?

最佳答案

首先,我同意这段代码应该放在中间件中,而不是放在 RouteServiceProvider 中。

如果您只关心语言,我建议只使用 app()->setLocale() 而不是在您的请求中保存网站。如果您需要 website 对象中包含的其他信息,我建议将其存储在 session 而不是请求中,因为我认为这种信息比请求更多地由 session 负责,而请求更适合处理输入、http 动词、 header 、...

这可以解决您的问题,如果不是这样,让我们​​看看您的更多代码和新的 dd() 结果

关于Laravel HTTP 测试和请求属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55284243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com