sayful1/slim-flash

使用 sweetAlert 为 Slim Framework 3 实现简易的 Flash 通知

1.0.1 2018-01-24 05:30 UTC

This package is not auto-updated.

Last update: 2024-09-27 12:17:03 UTC


README

此仓库包含一个 Slim Framework Flash 消息服务提供者。这允许您定义只从当前请求持续到下一个请求的短暂消息。

安装

通过 Composer

$ composer require sayful1/slim-flash

需要 Slim 3.0.0 或更高版本。

用法

// Start PHP session
session_start();

$app = new \Slim\App();

// Fetch DI Container
$container = $app->getContainer();

// Register provider
$container['flash'] = function () {
    return new \Sayful\SlimFlash\Flash();
};

$app->get('/foo', function ($req, $res, $args) {
    // Set flash message for next request
    $this->flash->success('Test', 'This is a message');
    
    // You may also do
    $this->flash->info('Info!', 'This is info message.');
    $this->flash->warning('Warning!', 'This is warning message.');
    $this->flash->error('Title', 'This is error message.');
    
    // All method can also take on parameter
    $this->flash->success('This is message without title.');

    // Redirect
    return $res->withStatus(302)->withHeader('Location', '/bar');
});

$app->get('/bar', function ($req, $res, $args) {
    // Get flash messages from previous request
    $messages = $this->flash->getMessages();
    print_r($messages);

    // Get the first message
    $test = $this->flash->getFlashMessage();
    print_r($test);
});

$app->run();

幕后,这将在会话中设置几个键

  • 'flash_message'
  • 'flash_message_overlay'

将 Flash 作为全局变量添加到 Twig-View。有关 Twig-View,请参阅 Slim Framework Twig View 的文档

$container['view'] = function ($container) {
    ...
    // Add flash as global variable to twig view
    $view->getEnvironment()->addGlobal( 'flash', $container->flash );
    ...
};

将此消息闪存到会话后,您现在可以在您的视图(s)中显示它。也许像使用 twig-view 包一样

{% if flash.getFlashMessage() %}
    <script type="text/javascript">
        {% if flash.getFlashMessage.message %}
        swal({
            title: "{{ flash.getFlashMessage.title }}",
            text: "{{ flash.getFlashMessage.message }}",
            icon: "{{ flash.getFlashMessage.label }}",
            button: false,
            timer: 2000
        });
        {% else %}
        swal({
            text: "{{ flash.getFlashMessage.title }}",
            icon: "{{ flash.getFlashMessage.label }}",
            button: false,
            timer: 2000
        });
        {% endif %}
    </script>
{% endif %}

请注意,此包针对与 sweetAlert 的使用进行了优化。

您还可以使用 Bootstrap 实现此包

{% if flash.getFlashMessage() %}
    {% if flash.getFlashMessage.message %}
        <div class="alert alert-dismissible alert-{{ flash.getFlashMessage.label }}" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
                        aria-hidden="true">&times;</span></button>
            <h4 class="alert-heading">{{ flash.getFlashMessage.title }}</h4>
            <p>{{ flash.getFlashMessage.message }}</p>
        </div>
    {% else %}
        <div class="alert alert-dismissible alert-{{ flash.getFlashMessage.label }}" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
                        aria-hidden="true">&times;</span></button>
            {{ flash.getFlashMessage.title }}
        </div>
    {% endif %}
{% endif %}

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件