Laravel 会话管理:读取会话数据 Draft
问题
在 Laravel 中,如何读取会话数据?
回答
Laravel 中读写会话数据有两种主要方法:全局辅助函数 session
和通过一个 Request
实例。
全局辅助函数 session
Laravel 提供有一个全局辅助函数 session
来读写会话数据。 要读取会话数据,只需提供数据键名即可:
$value = session('key');
如果指定键不存在,返回 null
。因此我们可以同时提供一个默认值,如果指定键不存在,则返回默认值:
$value = session('key', 'default');
Request
实例
通过 Request
实例(可通过依赖注入获得)读写会话数据,实质是通过调用 Request
实例的 session()
方法返回一个 \Illuminate\Session\Store
实例,然后调用 Store
实例的方法读写会话数据,下面 UserController
控制器的 show
方法展示了这种用法 :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* 展示给定用户的配置文件。
*
* @param Request $request
* @param int $id
* @return Response
*/
public function show(Request $request, $id)
{
$value = $request->session()->get('key');
//
}
}
我们也可以传递一个默认值作为 get
方法的第二个参数。如果会话中不存在指定的键,便会返回这个默认值。有意思的是,你还可以传递一个闭包作为 get
方法的第二个参数,当所请求的键不存在时,get
方法将执行闭包并返回其结果:
$value = $request->session()->get('key', 'default');
$value = $request->session()->get('key', function () {
return 'default';
});
获取所有的会话数据
如果想要一次性获取所有会话数据,可以使用 all
方法:
$data = $request->session()->all();
判断会话中是否存在某个值
要确定会话中是否存在某个值且不为 null
,可以使用 has
方法。如果该值存在且不为 null
,那么 has
方法将返回 true
,否则返回 false
:
if ($request->session()->has('users')) {
//
}
如果只是想确定会话中是否存在某个值,即使为 null
,可以使用 exists
方法。如果值存在,则 exists
方法返回 true
,否则返回 false
:
if ($request->session()->exists('users')) {
//
}