lukebro/flash

Laravel 5.* 中的神奇闪存通知

v0.4.0 2019-09-06 14:32 UTC

This package is not auto-updated.

Last update: 2024-09-22 07:43:59 UTC


README

Build Status

一个简单的神奇 API,用于向 Laravel 5.* 的会话中闪存通知。

flash()->success('Signed in successfully.');

安装

需要 PHP 5.5.9,Laravel 5.* & 6.* 和 Composer。

将以下行添加到您的 composer.json 文件的 require 块中

	"lukebro/flash": "~0.3"

运行 composer installcomposer update

\config\app.php 中包含服务提供者

	'providers': [
			Lukebro\Flash\FlashServiceProvider::class,
	];

在相同文件的底部添加外观别名

	'aliases' => [
	    'Flash' => Lukebro\Flash\FlashFacade::class
	];

用法

闪存通知

在重定向之前,向屏幕闪存一条消息

flash()->warning('Max file size is 5MB.');

在您的视图中,您可以访问 flash()->levelflash()->message 属性。

level 属性是您调用的函数的名称,可以是任何名称。 message 属性是您传递给神奇函数的字符串。

所以,对于上面的例子,flash()->levelflash()->message 分别是 warningMax file size is 5MB.

闪存消息不是必需的,只调用方法将只闪存级别。

您还可以访问一个 Flash 外观,您可以将其用作 flash() 辅助函数的替代。

闪存多个通知

您可以像这样链式调用您的闪存

flash()->warning('Max file size is 5MB.')
	   ->warning('Username is required.')
	   ->danger('There was an error validating your information.');

在您的视图中,flash()->levelflash()->message 属性将返回最后闪存的消息的级别和消息。要获取闪存的所有消息的 Collection,您可以使用 flash()->all()

例如,要迭代您视图中的所有闪存消息

@foreach (flash()->all() as $flash)
	<div class="alert alert-{{ $flash->level }}">{{ $flash->message }}</div>
@endforeach

flash()->all() 返回 Laravel 的 Collection 类,因此您可以访问 Collection 包含的所有方法,例如 groupBy()chunk()toJson() 等。它也可以简单地被视为一个数组。

检测闪存通知

要检测会话中是否存在任何闪存消息,请使用 flash()->exists()

如果您想检测特定的级别,请使用 has() 方法。例如,flash()->has('error')。这对于单个或多个闪存消息都适用。

最好的做法是检测是否闪存了特定的级别,然后使用 get() 方法显示该级别的通知。

@if (flash()->has('error'))
	<ul class="errors">
		@foreach (flash()->get('error') as $flash)
			<li>{{ $flash->message }}</li>
		@endforeach
	</ul>
@endif

重新闪存通知

要重新闪存通知或所有通知到下一个请求,请使用 again() 函数。

flash()->again();

您可以在调用 flash()->again() 方法之前或之后闪存更多消息。

辅助函数

您也可以直接将级别和消息传递给 flash() 辅助函数。

flash('error', 'There was an error processing your request.');

单次与多次闪存

根据您的应用程序需求,设置您的视图以使用循环或仅使用属性显示闪存。例如,如果您的应用程序一次只闪存一条通知,则在您的视图中直接使用 flash()->levelflash()->message 是可以的。

但是,如果您的应用程序将闪存多个通知,则最好设置一个 foreach 循环并迭代 flash()->all()。即使闪存了多个通知,您也可以直接访问 flash()->levelflash()->message 属性,但它们的值将是最后闪存的通知。

示例

以下是一些基本的 blade 模板/示例。

单次闪存示例

@if (flash()->exists())
	<div class="alert alert-{{ flash()->level }}">
		{{ flash()->message }}
	</div>
@endif

多次闪存示例

@if (flash()->exists())
	@foreach (flash()->all() as $flash)
		<div class="alert alert-{{ $flash->level }}">
			{{ $flash->message }}
		</div>
	@endforeach
@endif

检测特定级别

@if (flash()->has('success'))
	<script>
		launchFireworks();
	</script>
@endif

检测特定级别并显示多条消息

@if (flash()->has('error'))
	<ul class="errors">
		@foreach (flash()->get('error') as $flash)
			<li>{{ $flash->message }}</li>
		@endforeach
	</ul>
@endif

详细信息

数据存储在Laravel的会话中,键为flashes,格式如下

[
	'flashes' => [
		['level' => '', 'message' => ],
		['level' => '', 'message' => ]
	]
]

flash()->all()返回一个Flash对象集合。Flash对象包含两个属性:levelmessage,它们是公开可访问的。您也可以使用数组语法访问它们,例如:$flash['level']$flash['message']。Flash对象具有toArray()toJson()方法。

贡献

请随时创建一个issue,提出功能请求或错误报告。如果您愿意自己实现功能或修复错误,请创建一个pull request。我对这个包的发展方向还不太确定,到目前为止,我对它的现状非常满意。

贡献也可以是文档,而不仅仅是代码。如果您认为您能比我更好地解释API,请这样做,我很乐意将其合并进来。

我很乐意听听您对这个包的感受以及您不喜欢的地方。

鸣谢

这个极小包的灵感来源于Jeffrey Way的Laracast视频:[优雅的Flash消息](https://laracasts.com/series/build-project-flyer-with-me/episodes/9)。绝对值得一试。Jeffrey提到,您可以将API写成“神奇”的方式,所以我想到这是一个很酷的实现。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件