This repository contains a Slim Framework Flash messages service provider. This enables you to define transient messages that persist only from the current request to the next request.
Via Composer
$ composer require slim/flashRequires Slim 3.0.0 or newer.
This example assumes that you have php-di/php-di installed.
<?phpuseDI\ContainerBuilder;
useSlim\Factory\AppFactory;
useSlim\Flash\Messages;
useSlim\Routing\RouteContext;
require_once__DIR__ . '/../vendor/autoload.php';
$containerBuilder = newContainerBuilder();
// Add container definition for the flash component$containerBuilder->addDefinitions(
[
'flash' => function () {
$storage = [];
returnnewMessages($storage);
}
]
);
AppFactory::setContainer($containerBuilder->build());
$app = AppFactory::create();
// Add session start middleware$app->add(
function ($request, $next) {
// Start PHP sessionif (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// Change flash message storage$this->get('flash')->__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('flash')->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('flash');
// 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();// Start PHP sessionsession_start();
$app = new \Slim\App();
// Fetch DI Container$container = $app->getContainer();
// Register provider$container['flash'] = function () {
returnnew \Slim\Flash\Messages();
};
$app->get('/foo', function ($req, $res, $args) {
// Set flash message for next request$this->flash->addMessage('Test', 'This is a message');
// Redirectreturn$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 from a specific key$test = $this->flash->getFirstMessage('Test');
print_r($test);
});
$app->run();Please note that a message could be a string, object or array. Please check what your storage can handle.
If you use Twig-View, then slim-twig-flash may be a useful integration package.
$ phpunitPlease see CONTRIBUTING for details.
If you discover any security related issues, please email security@slimframework.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.