spanky/flasher

v0.0.3 2014-05-26 17:36 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:56:57 UTC


README

这是一个简单的PHP (5.3+) 包,用于简化在用户与网站交互时向他们显示反馈的过程。

当您希望在用户完成网站上某些操作后,在下一次页面加载时向用户提供反馈时,此包非常有用。例如,一条消息确认他们已成功注册或删除了他们的账户。

安装

安装此包最简单和最好的方式是通过 Composer。将 spanky/flasher 包添加到您的需求中,然后执行 composer install

{
    "require": {
        "spanky/flasher": "dev-master"
    }
}

安装完包后,在使用Flasher之前,请确保已要求Composer自动加载器。

    require 'vendor/autoload.php';

用法

要开始运行,首先我们需要创建一个 Spanky\Flasher\FlasherManager 类的实例。

为此,只需在 Spanky\Flasher\Factory 类上调用 make() 方法。

<?php

use Spanky\Flasher\Factory as Flasher;

$flasher = Flasher::make();

如果使用 Spanky\Flasher\MessageStore\SessionMessageStore 实现来存储页面加载之间的消息(默认实现),确保在初始化包之前启动会话。

session_start();

设置消息

要将消息设置为在下次页面加载时显示,请调用 addMessage() 方法,并传入消息的内容。

$flasher->addMessage('Welcome to the website!');

$flasher->addMessage('Congratulations, you are now signed up!', 'success');

$flasher->addMessage('Oh no, something went wrong!', 'error');

第一个参数是要向用户显示的消息内容。这必须是字符串,或者是一个实现了 __toString() 方法的对象。

请注意,您还可以通过 addMessage() 方法的第二个参数指定一个可选的字符串来指明所提供消息的类型。

如果您愿意,也可以以下方式添加特定类型的消息

$flasher->addSuccess('Congratulations, you are now signed up!');
// identical to $flasher->addMessage('Congratulations, you are now signed up!', 'success');

显示消息

当涉及到实际向用户显示消息时,有一些方法可以帮助您以最大灵活性完成此操作。

if ($flasher->hasMessages()) 
{
    echo '<ul>';
    foreach($flasher->getMessages() as $message) 
    {
        echo '<li class="'.$message->getType().'">', $message, '</li>';
    }
    echo '</ul>';
}

首先,我们使用 hasMessages() 方法检查是否有要显示的消息,该方法返回 truefalse,具体取决于是否有要显示的消息。

如果有消息,则通过调用 getMessages 方法检索它们,该方法返回一个包含 Spanky\Flasher\FlashMessage 对象的实例,这些对象代表消息。

可以通过在对象上调用 getType() 方法来获取消息类型,并通过调用 getContent() 方法或将其转换为字符串来获取实际内容。

仅显示特定类型的消息

要仅检查或显示特定类型的消息,将类型字符串传递给 hasMessages()getMessages() 方法,如下所示

if ($flasher->hasMessages('success')) 
{
    echo '<ul>';
    foreach($flasher->getMessages('success') as $message) 
    {
        echo '<li class="'.$message->getType().'">', $message, '</li>';
    }
    echo '</ul>';
}

仅显示第一条或最后一条消息

在某些情况下,您可能不希望显示所有消息,而只想显示第一条或最后一条。您可以通过在 Spanky\Flasher\Collections\MessageCollection 类上使用 first()last() 方法轻松完成此操作。

if ($flasher->hasMessages('error')) 
{
    echo '<div class="error"><strong>', $flasher->getMessages('error')->first(), '</strong></div>';
}

与 Laravel 一起使用

如果您正在使用 Laravel 与此包一起使用,那么您可以利用提供的服务提供者和外观来跳过引导过程。

首先,将 Spanky\Flasher\Laravel\FlasherServiceProvider 添加到您的 config.php 文件中的 providers 列表。

'providers' => array(
    ...
    'Spanky\Flasher\Laravel\FlasherServiceProvider',
)

接下来,将以下键/值对添加到同一文件中aliases列表中。

'aliases' => array(
    ...
    'Spanky\Flasher\Laravel\Flasher' => 'Flasher'
)

现在您可以通过在Flasher "外观"类上静态调用Spanky\Flasher\FlasherManager类的类名来使用该包。

Route::post('/login', function()
{
    // logic code here

    Flasher::addSuccess('You are now logged in!');
    return Redirect::to('dashboard');
});

测试

运行phpunit以触发测试套件。