FireHead996 / flash-messages

Flash messages service provider

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Flash Messages

This repository contains a Flash messages service provider. This enables you to define transient messages that persist only from the current request to the next request.

Install

Via Composer

$ composer require firehead996/flash-messages

Usage

Slim 4

This example assumes that you have php-di/php-di installed.

<?php

use DI\ContainerBuilder;
use Slim\Factory\AppFactory;
use Slim\Routing\RouteContext;
use Firehead996\Flash\MessagesInterface;
use Firehead996\Flash\Messages;

require_once __DIR__ . '/../vendor/autoload.php';

$containerBuilder = new ContainerBuilder();

// Add container definition for the flash component
$containerBuilder->addDefinitions(
    [
        MessagesInterface::class => function () {
            $storage = [];
            return new Messages($storage);
        }
    ]
);

AppFactory::setContainer($containerBuilder->build());

$app = AppFactory::create();

// Add session start middleware
$app->add(function ($request, $next) {
    // Start PHP session
    if (session_status() !== PHP_SESSION_ACTIVE) {
        session_start();
    }

    // Change flash message storage
    $this->get(MessagesInterface::class)->__construct($_SESSION);

    return $next->handle($request);
});

$app->addErrorMiddleware(true, true, true);

// Add routes
$app->get('/', function ($request, $response) {
    // Set flash message for next request
    $this->get(MessagesInterface::class)->addMessage('Test', 'This is a message');

    // Redirect
    $url = RouteContext::fromRequest($request)->getRouteParser()->urlFor('bar');

    return $response->withStatus(302)->withHeader('Location', $url);
});

$app->get('/bar', function ($request, $response) {
    $flash = $this->get(MessagesInterface::class);

    // Get flash messages from previous request
    $messages = $flash->getMessages();
    print_r($messages);

    // Get the first message from a specific key
    $test = $flash->getFirstMessage('Test');
    print_r($test);

    return $response;
})->setName('bar');

$app->run();

Please note that a message could be a string, object or array. Please check what your storage can handle.

Testing

$ phpunit

License

The MIT License (MIT). Please see License File for more information.

About

Flash messages service provider

License:MIT License


Languages

Language:PHP 100.0%