valkovic/flash

Laravel的Flash消息

v0.1.0 2017-02-22 18:36 UTC

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消息的视图。