leeovery/flasher

一个Laravel包,可以将1条或多条消息闪存到会话中,能够覆盖之前或未来的消息,并限制消息只在每个会话、每小时、每天等中出现一次。

v1.1.1 2017-02-21 15:43 UTC

This package is auto-updated.

Last update: 2024-09-28 01:41:02 UTC


README

Latest Version on Packagist Software License

一个Laravel包(>=5.3),可以将1条或多条消息闪存到会话中,能够覆盖之前或未来的消息,并限制消息只在每个会话、每小时、每天等中出现一次。

可以与其他框架结合使用,但已为Laravel会话和缓存设置好。

安装

通过Composer

$ composer require leeovery/flasher

添加包后,将ServiceProvider添加到config/app.php中的providers数组

LeeOvery\Flasher\FlasherServiceProvider::class,

您还可以发布配置文件和视图文件,根据需要进行调整

$ php artisan vendor:publish --provider="Leeovery\Flasher\FlasherServiceProvider" --tag="flasher-config"

视图

已包含一个简单的Vue / Semantic-UI实现作为视图,但您可以根据需要发布和编辑blade文件。

要使用Vue Alert组件,请将其复制到您的项目中,然后在bootstrap js文件中导入它,并使用Vue设置组件

import Vue from "vue";
import Alert from "./components/Alert.vue";
Vue.component('alert', Alert);

您还可以选择发布用于闪存消息输出的blade文件,并根据需要自定义

$ php artisan vendor:publish --provider="Leeovery\Flasher\FlasherServiceProvider" --tag="flasher-views"

用法

最简单的实现方法就是使用闪存器辅助函数。如果您向函数传递一个消息,它将只将一条信息消息作为闪存消息输出到会话中,以便在下一个请求中显示。

flasher('This is an info message);

如果您想显示不同类型的消息,可以执行以下操作

flasher()->success('This is a success message');
flasher()->error('This is an error message');
flasher()->warning('This is a warning message');
flasher()->info('This is an info message');

您还可以选择传递一个标题

flasher()->title('This is a title.')
         ->info('This is an info message.');

闪存当前请求

有时,特别是在中间件中,您可能希望在当前请求中显示一条消息,而不是在下一个请求中显示。您可以通过将now()方法传递给链来完成此操作

flasher()->now()
         ->title('This is a title.')
         ->info('This info message will show in this request.');

覆盖消息

如果您想在(使用now()的当前请求或下一个请求)闪存一条消息,但想确保它是唯一的闪存消息,可以包含覆盖方法,这将清除请求周期中过去或未来的任何闪存消息

flasher()->override()
         ->title('This is a title.')
         ->info('This info message will show in this request.');

如果您只想覆盖相同类型的消息,可以将false作为覆盖方法的第一个参数传递。在上面的示例中,这意味着只有信息消息将被覆盖,但任何其他类型的闪存消息将被允许。

如果您将false作为覆盖方法的第二个参数传递,这将允许您仅覆盖之前的消息,但允许在此消息之后闪存的任何未来消息。在某些情况下,这可能很有用。

###限制消息

您可以使用限制方法来控制闪存消息显示的频率。例如,如果您想在每个会话中提醒用户完成其个人资料一次,可以执行以下操作

flasher()->oncePerSession()
         ->info('You still need to complete your profile.');

此消息将只在会话中闪存一次。这意味着当他们登录时,他们将看到消息。在下一次请求时,它将不会显示。但如果他们注销(或被自动注销),当他们下次登录时,他们将再次看到它。

您可以根据其他场景使用其他类型的限制。

flasher()->oncePerDay(5)
flasher()->oncePerMinute(15)
flasher()->oncePerHour()
flasher()->oncePerWeek(2)
flasher()->oncePerMonth(2)
flasher()->oncePerYear()
flasher()->oncePerSession()

如您所见,您可以将整数传递给基于时间的函数,它执行您期望的操作。OncePerDay(5)将只在每5天显示一次此闪存消息。

基于时间的'oncePer'方法使用缓存来存储消息数据的哈希。它包含了一个Laravel实现,该实现使用您在config中设置的默认缓存驱动程序。

贡献

请参阅CONTRIBUTINGCONDUCT以获取详细信息。

致谢

许可证

MIT 许可协议 (MIT)。请参阅许可证文件获取更多信息。