# laravel 一次性的提示信息组件 Flash Messages https://github.com/laracasts/flash # 这是什么 用于处理业务流程中的信息提示功能,例如,登录成功,登录失败,密码错误,添加成功,添加失败,权限不足,等,各种提示信息。 {% asset_img 2.png 弹出框提醒 %} {% asset_img 1.png 消息提醒 %} # 为什么需要 一次性的提示信息 因为看一遍就够了,所以就是一次性的。 # 安装 终端运行 `composer require laracasts/flash` 添加配置 `config/app.php` ``` //这就是提供服务的 服务提供者( Service Providers ) 'providers' => [ 'Laracasts\Flash\FlashServiceProvider' ]; //这就是别名,也就是所谓的,门面 ( facades ) 'aliases' => [ 'Flash' => 'Laracasts\Flash\Flash' ]; ``` # 使用 使用别名来使用,要在控制器头部,引入,`use Flash;` 不引入的话,使用辅助方法,也是可以的哦。 `flash()->success('You have been logged out.');` # 文本提示 ``` Flash::info('Message') Flash::success('Message') Flash::error('Message') Flash::warning('Message') Flash::overlay('Modal Message', 'Modal Title') ``` 视图中,引用提示框的模板 ``` @include('flash::message') ``` ## code ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"> </head> <body> <div class="container"> @include('flash::message') <p>Welcome to my website...</p> </div> <script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script src="http://cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <!-- This is only necessary if you do Flash::overlay('...') --> <script> $('#flash-overlay-modal').modal(); </script> </body> </html> ``` # 弹出框提示 ``` Flash::overlay('You are now a Laracasts member!'); ``` 这里需要注意,视图中,需要有,bootstrap的js文件以及juqery。 然后视图中,添加以下代码,才能看到弹出框哦。 ``` <script> $('#flash-overlay-modal').modal(); </script> ``` # 修改模板 如果你需要修改Flash的消息部分的模板,终端运行: `php artisan vendor:publish` 视图将位于`app/views/packages/laracasts/flash/`目录 这样子就可以改成你想要的样式了哦. # 不引用模板,直接写样式 视图增加 ``` @if (Session::has('flash_notification.message')) <div class="alert alert-{{ Session::get('flash_notification.level') }}"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> {{ Session::get('flash_notification.message') }} </div> @endif ``` # 不使用组件实现一次性信息提示. ## 窥探组件开发 希望通过这个小例子,可以窥探到laravel的部分理念。 控制器中 ``` //设置一次性消息 \Session::flash('flash_message', '用户名或密码错误'); ``` 视图中 获取是否存在一次性消息,如果有则显示出来. ``` @if(Session::has('flash_message')) <div class="alert alert-danger">{{ Session::get('flash_message') }}</div> @endif ``` 这里的意思是, 在SESSION中设置一次性的信息,`flash_message`,访问1次以后就会删除。 识图中,判断`flash_message`是否存在值,有的话提示出来。 这是不是就实现了,`Flash Messages`组件的功能啊。 既然都可以自己写出来,那么为什么引入组件呢,因为他是做了一层优雅的封装,让我们使用的时候,编写更少的代码,完成更多的功能,而不是一步一步的编写这些基础的代码。 根据这个原理,我们就可以设计出属于自己的组件,做出一个跟`Flash Messages`一样甚至更好的信息提示组件。 当然,我在往后讲解,如何自制组件,敬请期待。 # 总结 ## 需要进一步了解的 * laravel中session的使用 * 服务提供者( Service Providers ) * 门面 ( facades ) [[ Laravel 5.1 文档 ] 架构 —— 服务提供者](http://laravelacademy.org/post/91.html) [[ Laravel 5.1 文档 ] 架构 —— 门面(Facades)](http://laravelacademy.org/post/97.html) [[ Laravel 5.1 文档 ] 服务 —— Session](http://laravelacademy.org/post/230.html) ## 展望 希望,通过这个组件,能够让你窥探到laravel组件化开发初步概念,更快的理解其中的精髓。以及了解,`Service Providers`和`facades`的关系。 充分的了解后,当需要自己设计一个组件(`服务提供者( Service Providers )`)时能够游刃有余。得到一个 低耦合,高内聚 的组件。 >什么是高内聚、低耦合 > 内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。 > 耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身。 > 目的:使得模块的“可重用性”、“移植性”大大增强 这些概念性的东西,我们需要通过实践见真知,目前只需要了解。