Laravel 会话管理:读取会话数据 Draft 1 个改进

问题

在 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')) {
    //
}

参考

本 Wiki 尚未完善,邀您参与 如何撰写一篇高品质的 Wiki?
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!