devmarketer / laraflash

一个强大且灵活的闪存通知系统。在Laravel内置Flash消息功能的基础上进行了改进。

v1.3.1 2017-11-14 23:05 UTC

This package is not auto-updated.

Last update: 2024-09-15 04:42:13 UTC


README

我一直觉得Laravel中的闪存消息可以改进。基本的Session::flash并不糟糕,但考虑到我们在应用程序中多么依赖闪存通知,我总是想“肯定有更好的方法”。LaraFlash就是这样。

更重要的是,我想要一个更简洁的方式来处理闪存消息对象。我认为闪存消息对象应该像Eloquent Collection一样处理,这就是为什么我创建了LaraFlash

你可以只使用LaraFlash对象并自行管理消息,或者你可以让这个包为你处理一切,包括将消息输出给用户。

它支持多种方式与之交互,以匹配你的编码风格。有基本的辅助函数,如flash('出了点问题'),你也可以使用基本的门面LaraFlash::add('出了点问题'),或者你可以使用流畅的语法,如:LaraFlash::new()->content('Hello World')->title('欢迎')->type('info')->priority(5);。由你决定!

安装

安装过程简单,设置类似于其他任何Laravel包。

1. 使用Composer安装

首先,通过Composer引入包

composer require devmarketer/laraflash

2. 定义服务提供者和别名

接下来,我们需要引入别名和服务提供者。

注意:该包支持Laravel 5.5的新自动发现功能,所以如果你正在使用Laravel 5.5项目,则安装完成,你可以跳到第3步。

在你的config/app.php中定义一个新的服务提供者

'providers' => [
	//  other providers

	DevMarketer\LaraFlash\LaraFlashServiceProvider::class,
];

然后我们想在同一个config/app.php文件中定义一个别名。

'aliases' => [
	// other aliases

	'LaraFlash' => DevMarketer\LaraFlash\LaraFlashFacade::class,
];

3. 发布配置文件

配置文件允许你覆盖此包的默认设置以满足你的特定需求。

要生成配置文件,请将以下命令输入到你的终端

php artisan vendor:publish --tag=laraflash

用法

使用LaraFlash很简单。它扩展了内置的Laravel Session。把它看作是内置的,但具有强大的新功能。

向Session添加通知

我们可以将用法分为两部分。第一部分是添加到Session,第二部分是从Session中提取。

你可以选择几种方式将通知添加到LaraFlash Session中。首先,你可以使用LaraFlash门面。

use LaraFlash;

class PageController extends Controller
{
	public function save(Request $request)
	{
		$post = Post::create($request);

		// flash message to let user know it was successful
		LaraFlash::add('Successfully Saved Post');

		return redirect(route('index'));
	}
}

就是这样。你可以使用多种方法添加新的Flash消息。首先,你可以使用add()push()方法,并传入你想发送的消息字符串。

但这只是LaraFlash所能做的表面。LaraFlash之所以强大,还因为它存储了比主要消息更多的信息。默认情况下,它还存储了优先级、类型、标题和主要消息。你可以将这些其他选项作为第二个参数中的$options数组传入。

LaraFlash::add('You Post was Successfully Saved', array('title' => 'Congratulations! ', 'priority' => 3, 'type' => 'success'));

现在你明白为什么这变得很酷了。稍后你可以像从数据库中获取记录一样访问你的高级Flash消息。例如LaraFlash::first()->type;LaraFlash::first()->priority;。很酷,我们稍后会更多地讨论如何渲染消息,但我想要展示为什么这很酷。

支持每个请求多个Flash通知

我构建这个包的主要原因是,我经常发现自己需要向会话中添加多条消息。使用LaraFlash可以做到这一点,无需担心任何事情。

LaraFlash::add('Message1');
LaraFlash::add('Message2');
LaraFlash::add('Message3');

现在可以显示给用户三条消息。太棒了!

但不用担心。正如你稍后看到的,由于它被处理为原生的Laravel集合,因此向用户显示它们是无痛的。

Laravel Fluent Builder

Laravel是一个流畅美观的框架,因此你可以用同样的方式构建Flash通知。以下是创建新的LaraFlash消息的流畅链式方法。

LaraFlash::new()->content('Hello World')->title('Welcome')->type('info')->priority(5);

这还不是最棒的吗?阅读起来如此简单,同时仍然非常强大。

你可以省略不关心的属性,只设置对你重要的属性。根据你创建的消息类型,还有一些快捷方式。

LaraFlash::success('Congratulations, we did it');
LaraFlash::info('We are using cookies');
LaraFlash::warning('Something went wrong');
LaraFlash::danger('Something just blew up');

当然,你也可以链式调用这些方法,每次请求可以向同一个LaraFlash集合添加多条消息。

辅助函数

好吧,你可能还没有足够的酷炫方法将Flash通知添加到会话中。我将给你一个额外的。辅助函数通常非常受欢迎,因为它易于编写和阅读。

flash('Something went wrong');

就是这样!使用起来超级简单。就像使用LaraFlash::add()方法一样,如果你想声明其他属性,也可以传入一个$options数组。所有的闪存消息都会进入同一个LaraFlash集合,所以你可以随意混合使用这些技术。

flash('Something went wrong', array('title' => 'Oops! ', 'type' => 'danger', 'priority' => 5));
flash('We did it!');
flash('One small problem occurred', ['type' => 'warning']);

从会话中显示通知

当然,设置通知很简单,但总有一天我们需要向用户显示它们。

你可以在任何blade文件中访问LaraFlash。你可以轻松地使用以下方式获取所有Flash对象

{{ LaraFlash::all() }} 	// All notifications
{{ LaraFlash::notifications() }}    // All notifications (same as all())
{{ LaraFlash::first() }}
{{ LaraFlash::last() }}

然后你可以这样遍历它

@foreach (LaraFlash::notifications as $notification)
	<div class="alert alert-{{ $notification->type }}" role="alert">
		<h4>{{ $notification->title }}</h4>
		<p>{{ $notification->content }}</p>
	</div>
@endforeach

超级简单,对吧!

这个包的未来版本实际上会为你渲染消息,使它更容易。但所有这些都在适当的时候。

集合让生活更简单

正如我提到的,LaraFlash扩展了内置的Laravel会话以存储其消息,它还扩展了Laravel的collection()来管理所有消息。

这为什么很重要呢?

因为你可以将LaraFlash::all()通知视为数据库返回的Eloquent对象。你可以访问所有相同的方法,如->first()->last()->nth()->where()->sortBy()等。截至Laravel 5.5,LaraFlash支持83个内置集合函数。

这意味着你不仅可以在通知中存储强大的数据,还可以使用你已经熟悉的工作与模型时使用的命令来管理、排序、重新排列它们。事实上,LaraFlash的行为与数据库中的模型或记录集合相同。

就像我说的,我们只想让Laravel的Flash消息像在Laravel中应该的那样。

想要查看可以在你的LaraFlash对象上使用的83种方法?请查看原生集合方法列表:[链接](https://laravel.net.cn/docs/5.4/collections#available-methods)

贡献

我鼓励你为此包做出贡献,以改进它并使其变得更好。即使你不舒服于编码或提交拉取请求(PR),你仍然可以通过提交有关错误或请求新功能的错误报告来支持它,或者简单地帮助讨论现有的问题,以提供你的意见并塑造此包的进展。

阅读完整的贡献指南

联系

我很乐意听到你的声音。我在YouTube上运营DevMarketer频道,我们讨论如何"构建和增长你的下一个伟大想法"请订阅并查看视频。

我总是在Twitter上,这是与我沟通或关注我的绝佳方式。在Twitter上关注我

您也可以通过hello@jacurtis.com给我发送邮件,以提出其他请求。