我试图了解会话如何在Laravel 5(.4)中运行。 一方面有两种方法可以使用它们,如the official documentation中所述:
在Laravel中使用会话数据有两种主要方式:全局会话帮助程序和通过Request实例。
$request->session()->put('key', 'value');
和
session(['key' => 'value']);
文档说:
通过HTTP请求实例使用会话与使用全局会话帮助程序之间几乎没有实际区别。
但从未解释过它的区别。
另一方面,有#34; Facade方式":
Session::put('key', 'value');
最近我发现了这个Stack Overflow问题How to use session in laravel 5.2 controller。 train_fox以这种方式指出:
session()->put('key', 'value');
所以这总共有四种方式。我无法弄清楚为什么或何时使用这些或其他。有人知道这四个之间的区别吗?
顺便说一句,我能用Redis进行会话的唯一方法就是最后两种方式。
提前感谢您的启蒙。
答案 0 :(得分:2)
让我们首先考虑Facade:
Session::put('key', 'value');
此外墙呼叫Illuminate\Session\Store::put()
。
现在让我们考虑函数session()
:
function session($key = null, $default = null)
{
if (is_null($key)) {
return app('session');
}
if (is_array($key)) {
return app('session')->put($key);
}
// ...
}
阅读此内容,我们可以假设session(['a' => 'b'])
与session()->put('a', 'b')
的工作方式类似(因为如果它是一个数组,则会在同一个函数上调用put
)。
app('session')
返回Illuminate\Session\SessionManager
(https://laravel.com/docs/5.4/facades#facade-class-reference)。 Illuminate\Session\SessionManager
具有__call
函数,简称为会话的驱动程序。所以它的行为是一样的。
现在差异可能在于$request
功能与其他所有功能(因为它是在文档中编写的)。根据源代码,它返回\Symfony\Component\HttpFoundation\Session\SessionInterface
。 SessionInterface
的方法与Illuminate\Session\Store
的方法不同,所以可能与它有所不同。
好的,我放弃了。这很难理解。我无法帮助你,我迷失了。我保留这篇文章以了解历史需求。