felixdorn/flash

适用于PHP 7.3+ 的框架无关的闪光通知

3.0.0 2022-01-27 08:16 UTC

This package is auto-updated.

Last update: 2024-08-27 12:52:27 UTC


README

Library logo

闪光

Packagist Version Build Status codecov

  • 可扩展的
  • 完全测试并易于测试
  • 允许功能使用
  • 支持模板

入门指南

composer require felixdorn/flash

在开始使用 Flash 之前,您需要一个实现 Driver 的驱动程序和模板。

use Felix\Flash\Drivers\SessionDriver;
use Felix\Flash\Flash;
use Felix\Flash\Templates\SpectreTemplate;

$driver = new SessionDriver([
    // session_start options
    // see https://php.ac.cn/manual/fr/function.session-start.php
]);


// A random template
$template = new SpectreTemplate();

$flash = new Flash($driver, $template);

用法

以下是一些与闪光交互的常见示例。

在这些示例中,我假设您已经完成设置并且有一个正在运行的 Flash 实例。

闪光

$flash->success('message');

$flash->warning('message');

$flash->error('message');

$flash->info('message');

$flash->flash('type', 'message');

渲染

$flash->success('message');
$flash->warning('message1');

$flash->render(); // implicitly it's $flash->render('all')

// render 'message' and 'message1' using the defined template

$flash->render('success');

// render 'message' but not 'message1'

自定义类型

$flash->message('really-important', 'In movie gone in 60 seconds, things are gone in 60 seconds');

$flash->render(); // will also render `really-important` as a normal type.

$flash->render('really-important'); // will render `really-important` flashes using the default template

清除消息

$flash->success('Cool!');

$flash->clear('success'); // delete every success flash using the Driver

$flash->render(); // Won't render anything

$flash->success('Cool!');
$flash->error('Uhhhh.');

$flash->clear(); // Clear every flashes
 
$flash->render(); // Won't render anything

启用 & 禁用

$flash->error('Bad thing.');

$flash->disable();
// NOTE: Here, when disabling, you can still clear or render

$flash->success('Good thing');

$flash->enable();

$flash->render('all'); // 'all' is optional, it's the default value

// Here, only 'Bad thing.' will be rendered.

驱动程序

只有2个,但很容易实现一个新的(PR 受欢迎 :p)。

  • ArrayDriver 驱动程序,应仅用于测试目的。
  • SessionDriver 驱动程序与 PHP 中最常用的会话实现一起工作。

让我们深入了解它们的功能以及它们是如何工作的。这部分对于您想要创建自己的驱动程序很有用,否则请跳转到 下一节

驱动程序必须实现以下3个方法

  • clear(): self
  • push(FlashData $data): self
  • all(string $type = 'all'): array

clear方法

这是一个简单的例子。它应该清除任何推入的闪光。

push方法

这个方法接收一个包含闪光类型和值的 FlashData,并将其注册以便能够检索。

all方法

如果 $type = 'all',则此方法应返回格式如下推入的每个闪光:

return [
    '{someType}' => [
        'someFlash'
        // ...
    ],
    // ...
];

如果 $type 是其他内容,则应返回一个只包含此类型闪光的数组。

return [
    'someFlash'
];

模板

TestableTemplate 只返回 {type}: {value},因此更容易测试闪光是否正常工作,而不是输入所有无聊的 HTML。

注册模板

$flash->setTemplate(...);

您也可以在构建 Flash 对象时设置它

使用字符串的模板

这是一个最基础的,但也是最有用的。

<div class="alert {type}">{flash}</div>

因此,如果您推送了一个成功的“Hello!” 闪光。它将输出

<div class="alert success">Hello!</div>

使用可调用的模板

function (string $type, string $message): string {
    return sprintf('<div class="alert %s">%s</div>', $type, $message);
}

在这种情况下,您不需要可调用的,您可以使用基于字符串的模板,但这是它的工作方式。

使用 TemplateInterface 的模板

use Felix\Flash\Templates\TemplateInterface;

class MyTemplate implements TemplateInterface {
    public function toHtml(string $type,string $message){
        return sprintf('<div class="alert %s">%s</div>', $type, $message);
    }
}

在这种情况下,您不需要 Template 类,您可以直接使用基于字符串的模板,但这是它的工作方式。

测试

composer test

安全

如果您发现任何与安全相关的问题,请通过电子邮件 github@felixdorn.fr 报告,而不是使用问题跟踪器。

鸣谢

贡献者