이 라이브러리를 사용하면 슬림 한 프로젝트에서 임시 메시지를 사용할 수 있습니다. 템플릿에서 잡고 사용할 함수를 제공하는 확장을 통해 Twig 템플릿 시스템과 쉽게 통합됩니다. 간단한 메시지 문자열 생성에만 국한되지 않고 배열과 같은 다른 데이터 유형을 사용할 수 있습니다.
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 %}이 예에서 볼 수 있듯이 Twig Integration은 필수가 아닙니다.이 예에서는 메시징 제공 업체 API를 시연하는 데 중점을 둡니다.
<?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 ();이 예제는 PHP-Di 컨테이너와 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 ();템플릿에서 :
{% 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 %}이 예제를 실행하는 가장 쉬운 방법은 Docker를 통한 것입니다.
git clone https://github.com/WilliamSampaio/Slim-Flash-Messages.git
cd Slim-Flash-Messages
docker compose up -d --buildUP 프로세스를 완료하면 액세스하십시오.
FlashTwigExtension 이러한 기능을 Twig 템플릿에 제공합니다.
key (String/null = null ) 과 clear (bool = true )의 두 가지 선택 매개 변수를 수신합니다.
key : 지정되지 않은 경우 스토리지에 모든 데이터가있는 배열이 반환됩니다. 그렇지 않으면 키 값에 의해 인덱스 된 데이터가있는 배열 만 반환됩니다.clear : False 인 경우 기능이 호출 된 후에 항목이 저장에서 제거되지 않습니다. {% 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 %} key (String)의 두 매개 변수를 수신하고 remove (bool = true ) .
key : 키 값으로 인덱스 된 데이터가있는 배열의 첫 번째 항목이 반환됩니다.remove (선택 사항) : False 인 경우 기능이 호출 된 후에는 스토리지에서 항목이 제거되지 않습니다. {% 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 > key (String)의 두 매개 변수를 수신하고 remove (bool = true ) .
key : 키 값으로 인덱스 된 데이터가있는 배열의 마지막 항목이 반환됩니다.remove (선택 사항) : False 인 경우 기능이 호출 된 후에는 스토리지에서 항목이 제거되지 않습니다. {% 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 > 하나의 매개 변수 인 key (string) 를 수신합니다. 스토리지에 키가 정의되어 있는지 확인합니다. true 또는 false 반환합니다.
key : 확인할 키. {{ flash_has( ' messages ' ) ? ' exists! ' : " it doesn't exist... " }} 하나의 선택적 매개 변수 인 key (String) 를 수신합니다. 스토리지에서 데이터를 제거합니다. void 를 반환하십시오.
key (선택 사항) : 제거 될 키. 정의되지 않으면 스토리지에서 모든 데이터를 제거합니다. {{ flash_clear( ' messages ' ) }}테스트 스위트를 실행하려면 저장소를 복제하고 종속성을 설치해야합니다.
git clone https://github.com/WilliamSampaio/Slim-Flash-Messages.git
cd Slim-Flash-Messages
composer install
composer test
# Or
# composer coverage MIT 라이센스 (MIT). 자세한 내용은 라이센스 파일을 참조하십시오.