rasmusgodske / flashbeep
轻松创建Flash消息。
1.0.0
2024-06-02 15:42 UTC
Requires
- php: ^7.4 || ^8.0
- laravel/framework: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
README
FlashBeep是一个灵活的Flash消息系统,适用于Laravel应用程序。它允许轻松集成和自定义应用程序中的Flash消息,支持动态实例化、命名参数和预定义的消息类型。
FlashBeep通过使用flashMessage
辅助函数轻松创建Flash消息。该函数接收一个消息对象并将其存储在会话中,以便在视图中显示。
特性
- 动态消息创建:使用命名或位置参数即时创建Flash消息。
- 可配置:通过配置定义和自定义Flash消息类型。
- 可扩展:轻松通过自定义消息类型进行扩展。
安装
使用Composer将FlashBeep安装到您的PHP项目中
composer require rasmusgodske/flashbeep
配置
安装包后,将附带一个默认的配置文件。您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="RasmusGodske\FlashBeep\FlashServiceProvider"
编辑config/flash_messages.php
以设置消息类型和会话键
<?php return [ // The session key to access the flash messages eg. session('flash_messages') 'session_key' => 'flash_messages', // Different presets for flash messages used with the flashMessage() helper 'presets' => [ 'success' => RasmusGodske\FlashBeep\PresetMessages\SuccessFlash::class, 'info' => RasmusGodske\FlashBeep\PresetMessages\InfoFlash::class, 'warn' => RasmusGodske\FlashBeep\PresetMessages\WarnFlash::class, 'danger' => RasmusGodske\FlashBeep\PresetMessages\DangerFlash::class, ] ];
要添加自定义消息类型,请参阅创建自定义消息类型部分。
用法
您可以使用flashMessage
函数立即创建和发送消息。
以下是一些如何在控制器中创建和发送消息的示例
public function store(Request $request) { // Using named parameters flashMessage('info', [ 'summary' => 'Welcome', 'detail' => 'Thanks for visiting our site!', ]); // Using positional parameters flashMessage('success', [ 'Operation successful', 'Your request was processed successfully.' ]); // Directly passing an instance of a FlashMessageInterface flashMessageObj(new InfoFlash('Welcome', 'Thanks for visiting our site!')); return redirect()->route('home'); }
显示消息
要显示视图中发送的消息,您可以使用getFlashMessages()
。
getFlashMessages()简单地返回一个FlashMessageInterface对象数组。如下所示
// Using the default preset MessageFlashMessage class InfoFlash extends AbstractFlashMessage { public function __construct(string $summary, ?string $detail=null) { $this->addAttribute('severity', 'info'); $this->addAttribute('summary', $summary); $this->addAttribute('detail', $detail); } } // Add a message to the session flashMessageObj(new InfoFlash('Welcome', 'Thanks for visiting our site!')); // Get the messages from the session $messages = getFlashMessages(); // Messages would be equal to: $messages = [ [ "severity" => "info" "summary" => "Welcome", "detail" => "Thanks for visiting our site!", ] ]
与Laravel Blade一起使用
以下是如何在Laravel Blade视图中显示发送的消息的示例
注意
这尚未经过测试。
@if ($messages = getFlashMessages()) @foreach ($messages as $message) <div class="alert alert-{{ $message['severity'] }}"> <strong>{{ $message['summary'] }}</strong> <p>{{ $message['detail'] }}</p> </div> @endforeach @endif
与InertiaJS一起使用
以下是如何通过HandleInertiaRequests中间件将Flash消息传递给Inertia的示例。
class HandleInertiaRequests extends Middleware { public function share(Request $request) { return array_merge(parent::share($request), [ 'flashMessages' => getFlashMessages(), ]); } }
创建自定义消息类型
创建自定义消息类型最简单的方法是扩展AbstractFlashMessage
类,并使用$this->setAttribute('key', 'value')
添加您的属性。以下是一个自定义消息类型的示例
<?php namespace App\FlashMessages; use RasmusGodske\FlashBeep\FlashMessage\AbstractFlashMessage; class MyInfoFlash extends AbstractFlashMessage { public function __construct(string $summary, ?string $detail=null) { $this->addAttribute('severity', 'info'); $this->addAttribute('summary', $summary); $this->addAttribute('detail', $detail); } }
要使FlashMessage可用于与flashMessage
函数一起使用,您需要将其添加到config/flash_messages.php
文件中
return [ 'session_key' => 'flash_messages', 'presets' => [ 'info' => App\FlashMessages\MyInfoFlash::class, // <-- Add your custom message type here ], ];
现在您可以使用自定义消息类型如下所示
public function store(Request $request) { flashMessage('info', [ 'summary' => 'Welcome', 'detail' => 'Thanks for visiting our site!', ]); return redirect()->route('home'); }
或者不将其添加到配置文件中
public function store(Request $request) { flashMessageObj(new MyInfoFlash('Welcome', 'Thanks for visiting our site!')); return redirect()->route('home'); }