北京网帮你
Laravel 5 教程学习笔记Session::has('flash_message')
时间:2016-02-01 02:08:54 浏览:2806

Laravel 5 教程学习笔记

通过前面的代码已经可以完成文章的发布了,但是发布完之后没有给出任何的提示,直接跳转到了列表页,这样的体验不太好,我们还是要给出一些返回信息的。这一节主要就是介绍这个,有两种方法,下面分别列出来:

方法一:

首先修改 ArticlesController 中的 store() 方法:

  1. publicfunction store(ArticleRequest $request){

  2. Auth::user()->articles()->create($request->all());

  3.        \Session::flash('flash_message','文章发布成功');

  4. return redirect('articles');

  5. }

Session::flash() 方法是暂存数据的一种方法,它只在下次请求的时候有效。也就是说下次请求完成之后,该数据即消失。关于该方法,可以参考 文档

接下来修改模版文件,为模版添加输出信息的位置。修改 resources/views/main.blade.php 文件,在 @yield('content') 的上面添加下面代码:

  1. @if(Session::has('flash_message'))

  2. <div class="alert alert-success">{{Session::get('flash_message')}}</div>

  3. @endif

上面的 {{ Session::get('flash_message') }} 也可以用 {{ session('flash_message') }} 代替。其中 Session::has() 方法是判断 Session 是否存在,而 Session::get() 方法则是取出 Session 的值。

修改完成之后,发布一篇文章,可以看到,刚才添加的 Flash 数据显示出来了,而再次刷新页面之后,Flash数据已经消失不显示了。

laravel-flash-message

虽然上面实现了提示的功能,但是该功能还不是很完善。比如文章发布成功的信息,我们只需要它显示几秒钟后自动消失,而其他重要的信息,则需要用户关闭后才会消失等等,下面就来完善该功能。

重新修改 main.blade.php 文件中刚刚添加的代码:

  1. @if(Session::has('flash_message'))

  2. <div class="alert alert-success">

  3. <button class="close" type="button" data-dismiss="alert" aria-hidden="true">&times;</button>

  4. {{Session::get('flash_message')}}

  5. </div>

  6. @endif

上面的关闭按钮功能是 Bootstrap 自带的,我们需要引入 JS 文件才能关闭,随意需要在 @yield('footer') 前面添加代码:

  1. <scriptsrc="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>

  2. <scriptsrc="http://cdn.bootcss.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>

这时,重新发布一篇文章,可以看到提示信息的右上角出现了关闭按钮,点击后可以关闭提示信息。

现在,当返回的为重要信息时,需要用户自己点击关闭,而普通信息则出现N秒后自动消失。再次修改上面的代码:

  1. @if(Session::has('flash_message'))

  2. <div class="alert alert-success {{ Session::has('flash_message_important') ? 'alert-important' : '' }}">

  3. @if(Session::has('flash_message_important'))

  4. <button class="close" type="button" data-dismiss="alert" aria-hidden="true">&times;</button>

  5. @endif

  6. {{ session('flash_message')}}

  7. </div>

  8. @endif

然后在 @yield('footer') 前面, jQuery 文件的后面添加代码:

  1. <scripttype="text/java script">

  2.    $('div.alert').not('.alert-important').delay(3000).slideUp(300);

  3. </script>

这时发布文章,可以看到提示信息出现 3 秒后自动的消失了。

接着,修改控制器中的 store() 方法:

  1. publicfunction store(ArticleRequest $request){

  2. Auth::user()->articles()->create($request->all());

  3.        \Session::flash('flash_message','文章发布成功');

  4.        \Session::flash('flash_message_important',true);

  5. return redirect('articles');

  6. }

这时发布文章的话,因为 Session::has('flash_message_important') 的值为 true,所以,提示信息会出现关闭按钮,并且不会自动消息。

上面的代码也可以替换为:

  1. publicfunction store(ArticleRequest $request){

  2. Auth::user()->articles()->create($request->all());

  3. return redirect('articles')->with([

  4. 'flash_message'=>'文章发布成功',

  5. 'flash_message_important'=>true

  6. ]);

  7. }

接着创建 resources/views/partials 文件夹,并且在该文件夹下创建 flash.blade.php ,把刚刚添加到main.blade.php 中下面的这段代码删除,然后添加到 flash.blade.php 中:

  1. @if(Session::has('flash_message'))

  2. <div class="alert alert-success {{ Session::has('flash_message_important') ? 'alert-important' : '' }}">

  3. @if(Session::has('flash_message_important'))

  4. <button class="close" type="button" data-dismiss="alert" aria-hidden="true">&times;</button>

  5. @endif

  6. {{ session('flash_message')}}

  7. </div>

  8. @endif

然后在 main.blade.php 中该代码的位置引入子视图,添加代码:@include('partials.flash')

方法二:

打开命令行,进入Laravel安装目录,运行下面的代码:

  1. D:\wamp\www\laravel5>composer require laracasts/flash

然后修改 config/app.php 文件,在 providers 的最后添加:

  1. 'Laracasts\Flash\FlashServiceProvider',

aliases 的最后添加:

  1. 'Flash'=>'Laracasts\Flash\Flash',

接着修改 main.blade.php 文件,在刚才引入子视图的位置替换为下面代码:

  1. @include('flash::message')

修改 store() 方法:

  1. publicfunction store(ArticleRequest $request){

  2. Auth::user()->articles()->create($request->all());

  3.        flash('文章发布成功');

  4. // 或者使用方法 success(),warning(),error() 等

  5. // flash()->success('文章发布成功');

  6. return redirect('articles');

  7. }

注:上面的样式都是 Bootstrap 定义好的。

还可以使用 Bootstrap 的 modal() 方法,修改 main.blade.php 中 JS 代码:

  1. <scripttype="text/java script">

  2.    $('#flash-overlay-modal').modal();

  3. // $('div.alert').not('.alert-important').delay(3000).slideUp(300);

  4. </script>

然后修改控制器中的 store() 方法:

  1. publicfunction store(ArticleRequest $request){

  2. Auth::user()->articles()->create($request->all());

  3.        flash()->overlay('文章发布成功','Good Job');

  4. return redirect('articles');

  5. }

再次发布文章,出现下面的提示框:

flash-modal


[上一篇]bootstrap-treeview树插件使用2
[下一篇]bootstrap 3.3.5 modal模态框垂直

Copyright 2014 wbnsp.com copyright, all rights reserved

2014 版权所有 红花岗区网帮你信息技术工作室

工信部备案号: 黔ICP备14004469号

扫描二维码用手机发部信息