Perpustakaan ini memungkinkan Anda untuk menggunakan pesan sementara di proyek Slim Anda. Ini mudah diintegrasikan dengan sistem template Twig, melalui ekstensi yang menyediakan fungsi untuk diambil dan digunakan dalam templat. Tidak terbatas untuk membuat string pesan sederhana tetapi juga memungkinkan penggunaan tipe data lain seperti array.
composer require williamsampaio/slim-flash-messages // app/dependencies.php
//...
use SlimFlashMessages Flash ;
use SlimFlashMessages FlashProviderInterface ;
return function ( ContainerBuilder $ containerBuilder ) {
$ containerBuilder -> addDefinitions ([
//...
FlashProviderInterface::class => function () {
return Flash:: getInstance ();
},
]);
}; // app/middleware.php
//...
// use SlimFlashMessagesFlashMiddleware;
use SlimFlashMessages FlashTwigExtension ;
return function ( App $ app ) {
//...
// Optional if you are working with dependency injection,
// using the middleware is only useful if you need to obtain the Flash instance from request.
// $app->add(FlashMiddleware::createFromContainer($app));
// With Twig
$ twig = Twig:: create ( __DIR__ . ' /../templates ' , [ ' cache ' => false ]);
$ twig -> addExtension (FlashTwigExtension:: createFromContainer ( $ app ));
$ app -> add (TwigMiddleware:: create ( $ app , $ twig ));
}; // Your controller
//...
use Slim Views Twig ;
// use SlimFlashMessagesFlashProvider;
use SlimFlashMessages FlashProviderInterface ;
class YourController
{
private $ flash ;
private $ view ;
public function __construct ( FlashProviderInterface $ flash , Twig $ view )
{
$ this -> flash = $ flash ;
$ this -> view = $ view ;
}
public function index ( ServerRequestInterface $ request , ResponseInterface $ response )
{
// If you are working with middleware instead of dependency injection it will be this way.
// $flash = FlashProvider::fromRequest($request);
$ this -> flash -> add ( ' messages ' , ' Hello! ' );
return $ this -> view -> render ( $ response , ' template.twig ' );
}
//...
} {# template.twig #}
{% for msg in flash( ' messages ' ) %}
{{ msg }}
{% endfor %}Integrasi ranting tidak wajib, seperti yang dapat Anda lihat dalam contoh ini, di mana fokusnya adalah mendemonstrasikan API penyedia pesan.
<?php
use Psr Http Message ResponseInterface as Response ;
use Psr Http Message ServerRequestInterface as Request ;
use Slim Factory AppFactory ;
use SlimFlashMessages Flash ;
use SlimFlashMessages FlashMiddleware ;
use SlimFlashMessages FlashProvider ;
require __DIR__ . ' /../vendor/autoload.php ' ;
// Important! if the storage is not passed to the constructor,
// $_SESSION will be used
$ flash = Flash:: getInstance ();
// Create App
$ app = AppFactory:: create ();
$ app -> setBasePath ( ' /example1 ' ); // Optional
// Add FlashMiddleware
$ app -> add ( new FlashMiddleware ( $ flash ));
$ app -> addErrorMiddleware ( true , true , true );
$ app -> get ( ' / ' , function ( Request $ request , Response $ response , $ args ) {
// Get FlashProvider from request
// FlashMiddleware previously took care of adding the FlashProvider to the request
$ flash = FlashProvider:: fromRequest ( $ request );
// Clear all stored values
$ flash -> clearAll ();
// The 'add' method allows you to add a flash message or data (as an array, if you prefer!)
$ flash -> add ( ' simple ' , ' Hello World! 1 ' );
$ flash -> add ( ' messages ' , [
' status ' => ' success ' ,
' text ' => ' 1. PHP is the best! '
]);
echo ' <pre> ' ;
var_dump ( $ flash -> getAll ());
// Checks if the key is defined in the storage
var_dump ( $ flash -> has ( ' messages ' ));
// Clear a key defined
$ flash -> clear ( ' messages ' );
var_dump ( $ flash -> getAll ());
var_dump ( $ flash -> has ( ' messages ' ));
$ flash -> add ( ' simple ' , ' Hello World! 2 ' );
$ flash -> add ( ' simple ' , ' Hello World! 3 ' );
var_dump ( $ flash -> getAll ());
// Get first item from key
var_dump ( $ flash -> get_first ( ' simple ' ));
// or to pick up and remove first item.
// var_dump($flash->get_first('simple', true));
// Get last item from key
// var_dump($flash->get_last('simple'));
// or to pick up and remove last item.
var_dump ( $ flash -> get_last ( ' simple ' , true ));
var_dump ( $ flash -> get ( ' simple ' ));
return $ response ;
});
$ app -> run ();Contoh ini menggunakan wadah PHP-DI dan Slim/Twig-view.
<?php
use DI Container ;
use Psr Http Message ResponseInterface as Response ;
use Psr Http Message ServerRequestInterface as Request ;
use Slim Factory AppFactory ;
use Slim Views Twig ;
use Slim Views TwigMiddleware ;
use SlimFlashMessages Flash ;
use SlimFlashMessages FlashMiddleware ;
use SlimFlashMessages FlashProvider ;
use SlimFlashMessages FlashProviderInterface ;
use SlimFlashMessages FlashTwigExtension ;
require __DIR__ . ' /../vendor/autoload.php ' ;
// Create a new DI Container
$ container = new Container ();
// Add a FlashProvider to the container
$ container -> set (FlashProviderInterface::class, function () {
// Important! if the storage is not passed to the constructor,
// $_SESSION will be used
return Flash:: getInstance ();
});
// Set container to create App with on AppFactory
AppFactory:: setContainer ( $ container );
$ app = AppFactory:: create ();
$ app -> setBasePath ( ' /example2 ' ); // Optional
// Add FlashMiddleware from container
$ app -> add (FlashMiddleware:: createFromContainer ( $ app ));
// Create Twig and add FlashTwigExtension
$ twig = Twig:: create ( __DIR__ . ' /templates ' , [ ' cache ' => false ]);
$ twig -> addExtension (FlashTwigExtension:: createFromContainer ( $ app ));
// Add Twig-View Middleware
$ app -> add (TwigMiddleware:: create ( $ app , $ twig ));
$ app -> addErrorMiddleware ( true , true , true );
$ app -> get ( ' / ' , function ( Request $ request , Response $ response , $ args ) {
// Get Twig and FlashProvider from request
$ view = Twig:: fromRequest ( $ request );
// FlashMiddleware previously took care of adding the FlashProvider to the request
$ flash = FlashProvider:: fromRequest ( $ request , ' flash ' );
$ alerts = [ ' primary ' , ' secondary ' , ' success ' , ' danger ' , ' warning ' , ' info ' , ' light ' , ' dark ' ];
// The 'add' method allows you to add a flash message or data (as an array, if you prefer!)
$ flash -> add ( ' simple ' , ' Hello World! ' );
$ flash -> add ( ' messages ' , [
' alert ' => $ alerts [ array_rand ( $ alerts )],
' text ' => ' 1. PHP is the best! '
]);
$ flash -> add ( ' messages ' , [
' alert ' => $ alerts [ array_rand ( $ alerts )],
' text ' => ' 2. Slim Framework is amazing! '
]);
$ flash -> add ( ' messages ' , [
' alert ' => $ alerts [ array_rand ( $ alerts )],
' text ' => ' 3. Lorem ipsum! '
]);
return $ view -> render ( $ response , ' template.html.twig ' , [
' page ' => ' Slim Flash Messages ' ,
]);
});
$ app -> run ();Dalam template:
{% for msg in flash( ' messages ' ) %}
< div class = " alert alert-{{ msg . alert }} alert-dismissible fade show " role = " alert " >
{{ msg . text }}
< button type = " button " class = " btn-close " data-bs-dismiss = " alert " aria-label = " Close " ></ button >
</ div >
{% endfor %}Cara termudah untuk menjalankan contoh -contoh ini adalah melalui Docker.
git clone https://github.com/WilliamSampaio/Slim-Flash-Messages.git
cd Slim-Flash-Messages
docker compose up -d --buildSaat Anda menyelesaikan proses UP, akses:
FlashTwigExtension menyediakan fungsi -fungsi ini ke templat ranting Anda.
Ini menerima dua parameter opsional, key (string/null = null ) dan clear (bool = true ) .
key : Jika tidak ditentukan, array dengan semua data dalam penyimpanan akan dikembalikan, jika tidak hanya array dengan data yang diindeks oleh nilai kunci akan dikembalikan.clear : Jika salah, item tidak akan dihapus dari penyimpanan setelah fungsi dipanggil. {% for msg in flash( ' messages ' , false ) %}
< div class = " alert alert-{{ msg . alert }} alert-dismissible fade show " role = " alert " >
{{ msg . text }}
< button type = " button " class = " btn-close " data-bs-dismiss = " alert " aria-label = " Close " ></ button >
</ div >
{% endfor %} Ini menerima dua parameter, key (string) dan remove (bool = true ) .
key : Item pertama dari array dengan data yang diindeks oleh nilai kunci akan dikembalikan.remove (opsional): Jika salah, item tidak akan dihapus dari penyimpanan setelah fungsi dipanggil. {% set first = flash_first( ' messages ' ) %}
< div class = " alert alert-{{ first . alert }} alert-dismissible fade show " role = " alert " >
{{ first . text }}
< button type = " button " class = " btn-close " data-bs-dismiss = " alert " aria-label = " Close " ></ button >
</ div > Ini menerima dua parameter, key (string) dan remove (bool = true ) .
key : Item terakhir dari array dengan data yang diindeks oleh nilai kunci akan dikembalikan.remove (opsional): Jika salah, item tidak akan dihapus dari penyimpanan setelah fungsi dipanggil. {% set last = flash_last( ' messages ' ) %}
< div class = " alert alert-{{ last . alert }} alert-dismissible fade show " role = " alert " >
{{ last . text }}
< button type = " button " class = " btn-close " data-bs-dismiss = " alert " aria-label = " Close " ></ button >
</ div > Ini menerima satu parameter, key (string) . Memeriksa apakah kunci didefinisikan dalam penyimpanan. Kembalikan true atau false .
key : Kunci yang akan diperiksa. {{ flash_has( ' messages ' ) ? ' exists! ' : " it doesn't exist... " }} Ini menerima satu parameter opsional, key (string) . Menghapus data dari penyimpanan. Return void .
key (Opsional): Kunci yang akan dihapus. Jika tidak ditentukan, itu menghapus semua data dari penyimpanan. {{ flash_clear( ' messages ' ) }}Untuk menjalankan suite tes, Anda harus mengkloning repositori dan menginstal dependensi.
git clone https://github.com/WilliamSampaio/Slim-Flash-Messages.git
cd Slim-Flash-Messages
composer install
composer test
# Or
# composer coverage Lisensi MIT (MIT). Silakan lihat file lisensi untuk informasi lebih lanjut.