rasmusgodske/flashbeep

轻松创建Flash消息。

1.0.0 2024-06-02 15:42 UTC

This package is auto-updated.

Last update: 2024-10-02 16:21:13 UTC


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');
}