在Laravel, 要将数据闪存到session (Flash to the session)可以很容易的实现,只要通过Laravel的 Session
门面的 flash()
方法就能实现。如果你对设计模式的门面(Facade)模式,也叫外观模式不是很清楚的话,可以自己先去翻查下资料,或者看下Laravel的文档,当然你也可以继续跟着教程走下去,先从简单的做起,然后再慢慢深入,虽然会有点迷惑,但是对于本节的学习影响并不大。
什么叫数据闪存到session呢?我通过一个相对还实用的例子来讲解下,比如说用户在 /login
页面登录后,会跳转到 /
首页,当跳转到首页后,在首页上弹出一条 :"You are now logged in. "的信息。做这个功能的时候我们就会使用到这个session flash的功能。当用户在登录页面登录的时候,将提示信息存入session中,当用户成功登录,页面跳转到首页的时候,从session中拿出这条信息,然后马上从session中删除掉这条信息。
laravel的Session门面的 flash()
这个方法就可以帮我们做完上面的事,它帮我存入一条缓存的数据,让该数据只在下一次的请求内有效,只能将数据保留到下个 HTTP 请求,然后就会被自动删除。所以取名叫数据闪存,也还挺形象的。
我们先来测试下 Session::flash()
这个方法,然后实现下上面讲的这个例子:
我们重新跑一个Laravel 5.2的项目,就取名叫 SessionFlash
吧:
laravel new SessionFlash --5.2
打开路由文件(大家现在应该很清楚路由文件就是routes.php,以后我就只写路由文件这4个字了),我们先针对一个请求来测试下 Session::flash()
这个方法, 编辑路由文件如下:
<?php Route::get('/', function () { // 'status' => 'Hello There' Session::flash('status', 'Hello There'); return view('welcome'); });
编辑 welcome.balde.php
中 <body>
中的内容:
<body> <div class="container"> {{-- 如果session中存在status这个键,那么读取它的值 --}} @if (Session::has('status')) <h3>{{ Session::get('status') }}</h3> @endif <div class="content"> <div class="title">Laravel 5</div> </div> </div> </body>
上面的 Session::has('status')
方法是判断sesison中是否存在'status'这个键。
我们访问下:
温馨提示: 请把welcome视图中的 <
删除,这串google文字途径海关的时候被扣押了,正处于报关状态,所以你的页面加载时会迟迟不出现内容