valkovic / flash
Laravel的Flash消息
Requires
- illuminate/session: ^5.4
- illuminate/support: ^5.4
Requires (Dev)
- phpunit/phpunit: ^6.0
This package is not auto-updated.
Last update: 2024-09-28 20:14:46 UTC
README
此包受laracasts/flash包的启发。
与该包不同,此包允许在一个请求期间使用多个Flash消息,并为HTML标签设置附加属性。
安装
首先,通过Composer引入此包。
运行composer require valkovic/flash
然后,如果使用Laravel 5,在config/app.php
中包含服务提供者。
'providers' => [ \Valkovic\Flash\FlashServiceProvider::class, ],
为正确使用,您还必须注册中间件,该中间件负责在请求期间加载和保存Flash消息。将中间件附加到您想要的任何组,例如,我将将其附加到web
组。设置在文件app/Http/Kernel.php
中。
'web' => [ \Valkovic\Flash\FlashMiddleware::class, ],
您还可以为Flash包注册Facade。只需在config/app.php
中设置别名。
'aliases' => [ 'Flash' => Valkovic\Flash\FlashFacade::class, ];
使用方法
在您的控制器中,在执行重定向之前...
public function store() { flash('Welcome Aboard!'); return home(); }
您也可以这样做
flash('消息', 'none')
flash('消息', 'info')
flash('消息', 'primary')
flash('消息', 'success')
flash('消息', 'warning')
flash('消息', 'error')
flash()->overlay('模态消息', '模态标题')
flash('消息')->important()
幕后,这将设置会话中的valkovic.flash-messages
键。
在下一次请求期间,Valkovic\Flash\FlashMiddleware
将从会话中加载消息并将它们作为Flashes
变量分发给所有视图。
然后,在您的视图中,您可以遍历它们。
<div class="notifications"> @foreach($flashes as $flash) <div> {{$flash->message}} </div> @endforeach </div>
如果设置了消息类型,则该类型将附加到消息作为CSS类。如果您想渲染该类,则必须调用$flash->renderProperties()
。因为此文本包含HTML特定标签,所以您必须不要从该方法中转义输出。
<div class="notifications">
@foreach($flashes as $flash)
<div {!! $flash->renderProperties() !!}>
{{$flash->message}}
</div>
@endforeach
</div>
注意,消息类型反映了Twitter Bootstrap中的类。
如果您愿意,可以向标签添加更多类或属性。例如,此代码
flash('Some message','primary',['class'=>'myClass','id'=>'flashMessage']);
与前面的blade示例将生成以下代码。
<div class="notifications"> <div class="primary myClass" id="flashMessage"> Some message </div> </div>
另一种用法
此包提供了Flash
模型、Flash
外观和flash
辅助函数。您可以选择哪种方法更适合您。如果您想使用Flash
外观,您首先需要为它注册别名,如安装部分中所述。
这些命令将产生相同的结果。
flash('Message','success'); Flash()->success('Message'); flash()->success('Message'); //Note that flash() without parameters return Flash Model // OR INSIDE CLASS private $flash; public function __construct(\Valkovic\Flash\Flash $flash) { $this->flash = $flash; } public function send(User $user) { //store User $this->flash->success('Message'); }
如果您不想使用Bootstrap特定类,您可以使用数组作为message
方法或flash
辅助的第二参数,使用属性。
flash('Message',['class'=>'myClass','id'=>'flashMessage']); Flash()->message('Message',['class'=>'myClass','id'=>'flashMessage']); //with template before will produce <div class="notifications"> <div class="myClass" id="flashMessage"> Some message </div> </div>
隐藏Flash消息
一个常见的愿望是显示一条Flash消息几秒钟,然后隐藏它。为了处理这个问题,写一点简单的JavaScript。例如,使用jQuery,您可以在</body>
标签之前添加以下片段。因为您可以将ID属性附加到标签上,所以您可以直接引用ID属性。
flash('Message',['id'=>'toHide']);
<script>
$('#toHide').delay(3000).fadeOut(350);
</script>
自定义视图
此包当前版本不提供显示Flash消息的视图。