Resumo : neste tutorial, você aprenderá sobre as mensagens flash do PHP e definirá uma flash()
função reutilizável para gerenciar as mensagens flash de forma eficaz.
Introdução às mensagens flash do PHP
Uma mensagem flash permite criar uma mensagem em uma página e exibi-la uma vez em outra página. Para transferir uma mensagem de uma página para outra, você usa a $_SESSION
variável superglobal.
Por exemplo, você pode adicionar uma mensagem na $_SESSION
primeira página:
<?php
session_start();
$_SESSION['flash_message'] = "I'm a flash message';
Linguagem de código: PHP ( php )
Posteriormente, em outra página, você pode obter a mensagem flash da $_SESSION
variável e atribuí-la a uma variável. Em seguida, você exclui a mensagem $_SESSION
e exibe a mensagem:
<?php
session_start();
if(isset($_SESSION['flash_message'])) {
$message = $_SESSION['flash_message'];
unset($_SESSION['flash_message']);
echo $message;
}
Linguagem de código: PHP ( php )
Este é um exemplo simples de mensagem flash.
Na prática, uma mensagem flash possui um nome (ou ID) para referência posterior. Além disso, uma mensagem flash tem tipos como erro, sucesso, informação e aviso. O tipo de mensagem permite que você crie um estilo específico para a mensagem
Na seção a seguir, definiremos um conjunto de funções que fazem o seguinte:
- Crie uma mensagem flash com um nome.
- Formate uma mensagem flash.
- Exibe uma mensagem flash especificada por um nome.
- Exiba todas as mensagens flash.
Crie uma mensagem flash
Primeiro, defina uma constante como chave para todas as mensagens flash:
const FLASH = 'FLASH_MESSAGES';
Linguagem de código: PHP ( php )
Segundo, defina constantes que definam o tipo de mensagens flash, incluindo erro, informação, aviso e sucesso:
const FLASH_ERROR = 'error';
const FLASH_WARNING = 'warning';
const FLASH_INFO = 'info';
const FLASH_SUCCESS = 'success';
Linguagem de código: PHP ( php )
Terceiro, defina uma função que crie uma mensagem flash que tenha um nome, uma mensagem e um tipo:
<?php
/**
* Create a flash message
*
* @param string $name
* @param string $message
* @param string $type
* @return void
*/
function create_flash_message(string $name, string $message, string $type): void
{
// remove existing message with the name
if (isset($_SESSION[FLASH][$name])) {
unset($_SESSION[FLASH][$name]);
}
// add the message to the session
$_SESSION[FLASH][$name] = ['message' => $message, 'type' => $type];
}
Linguagem de código: PHP ( php )
Formatar uma mensagem flash
A format_flash_message()
função a seguir formata uma mensagem flash:
/**
* Format a flash message
*
* @param array $flash_message
* @return string
*/
function format_flash_message(array $flash_message): string
{
return sprintf('<div class="alert alert-%s">%s</div>',
$flash_message['type'],
$flash_message['message']
);
}
Linguagem de código: PHP ( php )
Nesta função, usamos o seguinte HTML com a classe alert
e alert-$type
para formatar a mensagem. O tipo de mensagem pode ser erro, informação, aviso e sucesso.
O exemplo a seguir mostra uma mensagem de erro:
<div class="alert alert-error">
This is an error!
</div>
Linguagem de código: HTML, XML ( xml )
Exibir uma mensagem flash
Para exibir uma mensagem flash por um nome, verifique se o nome da mensagem existe na $_SESSION[FLASH]
variável. Nesse caso, você recebe a mensagem flash no $_SESSION['FLASH']
, remove-a do $_SESSION['FLASH']
e exibe a mensagem flash:
<?php
/**
* Display a flash message
*
* @param string $name
* @return void
*/
function display_flash_message(string $name): void
{
if (!isset($_SESSION[FLASH][$name])) {
return;
}
// get message from the session
$flash_message = $_SESSION[FLASH][$name];
// delete the flash message
unset($_SESSION[FLASH][$name]);
// display the flash message
echo format_flash_message($flash_message);
}
Linguagem de código: PHP ( php )
Exibir todas as mensagens flash
A função a seguir exibe todas as mensagens flash da $_SESSION['FLASH']
variável:
<?php
/**
* Display all flash messages
*
* @return void
*/
function display_all_flash_messages(): void
{
if (!isset($_SESSION[FLASH])) {
return;
}
// get flash messages
$flash_messages = $_SESSION[FLASH];
// remove all the flash messages
unset($_SESSION[FLASH]);
// show all flash messages
foreach ($flash_messages as $flash_message) {
echo format_flash_message($flash_message);
}
}
Linguagem de código: PHP ( php )
Defina a função flash()
Seria mais conveniente se definissemos uma única flash()
função que:
- Crie uma mensagem flash
- Exibir uma mensagem flash
- Exibir todas as mensagens flash
A flash()
função a seguir reutiliza as funções acima:
<?php
/**
* Flash a message
*
* @param string $name
* @param string $message
* @param string $type (error, warning, info, success)
* @return void
*/
function flash(string $name = '', string $message = '', string $type = ''): void
{
if ($name !== '' && $message !== '' && $type !== '') {
create_flash_message($name, $message, $type);
} elseif ($name !== '' && $message === '' && $type === '') {
display_flash_message($name);
} elseif ($name === '' && $message === '' && $type === '') {
display_all_flash_messages();
}
}
Linguagem de código: PHP ( php )
Para criar uma mensagem flash, você passa três argumentos: name
, message
e type
para a flash()
função assim:
flash('greeting', 'Hi there', FLASH_INFO);
Linguagem de código: PHP ( php )
Para exibir uma mensagem flash por a name
, você precisa passar a name
para a flash()
função:
flash('greeting');
Linguagem de código: PHP ( php )
Para exibir todas as mensagens flash, você não passa nenhum argumento para a flash()
função:
flash();
Linguagem de código: PHP ( php )
Junte tudo
O seguinte coloca todas as funções no arquivo flash.php:
<?php
const FLASH = 'FLASH_MESSAGES';
const FLASH_ERROR = 'error';
const FLASH_WARNING = 'warning';
const FLASH_INFO = 'info';
const FLASH_SUCCESS = 'success';
/**
* Create a flash message
*
* @param string $name
* @param string $message
* @param string $type
* @return void
*/
function create_flash_message(string $name, string $message, string $type): void
{
// remove existing message with the name
if (isset($_SESSION[FLASH][$name])) {
unset($_SESSION[FLASH][$name]);
}
// add the message to the session
$_SESSION[FLASH][$name] = ['message' => $message, 'type' => $type];
}
/**
* Format a flash message
*
* @param array $flash_message
* @return string
*/
function format_flash_message(array $flash_message): string
{
return sprintf('<div class="alert alert-%s">%s</div>',
$flash_message['type'],
$flash_message['message']
);
}
/**
* Display a flash message
*
* @param string $name
* @return void
*/
function display_flash_message(string $name): void
{
if (!isset($_SESSION[FLASH][$name])) {
return;
}
// get message from the session
$flash_message = $_SESSION[FLASH][$name];
// delete the flash message
unset($_SESSION[FLASH][$name]);
// display the flash message
echo format_flash_message($flash_message);
}
/**
* Display all flash messages
*
* @return void
*/
function display_all_flash_messages(): void
{
if (!isset($_SESSION[FLASH])) {
return;
}
// get flash messages
$flash_messages = $_SESSION[FLASH];
// remove all the flash messages
unset($_SESSION[FLASH]);
// show all flash messages
foreach ($flash_messages as $flash_message) {
echo format_flash_message($flash_message);
}
}
/**
* Flash a message
*
* @param string $name
* @param string $message
* @param string $type (error, warning, info, success)
* @return void
*/
function flash(string $name = '', string $message = '', string $type = ''): void
{
if ($name !== '' && $message !== '' && $type !== '') {
// create a flash message
create_flash_message($name, $message, $type);
} elseif ($name !== '' && $message === '' && $type === '') {
// display a flash message
display_flash_message($name);
} elseif ($name === '' && $message === '' && $type === '') {
// display all flash message
display_all_flash_messages();
}
}
Linguagem de código: HTML, XML ( xml )
Um exemplo de mensagem flash
Primeiro, crie o seguinte diretório e estrutura de arquivos:
├── inc
| ├── flash.php
| ├── footer.php
| └── header.php
├── page1.php
└── page2.php
Linguagem de código: texto simples ( texto simples )
Segundo, coloque todas as funções acima no flash.php
arquivo.
Terceiro, adicione o seguinte código ao header.php
arquivo. Os header.php
links para o style.css
arquivo na css
pasta:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://tutorials.acervolima.com/app/css/style.css">
<title>PHP Flash Message</title>
</head>
<body>
Linguagem de código: HTML, XML ( xml )
Quarto, adicione o seguinte HTML ao footer.php
arquivo:
</body>
</html>
Linguagem de código: HTML, XML ( xml )
Quinto, crie uma mensagem flash no page1.php
arquivo chamando a flash()
função:
<?php
session_start();
require __DIR__ . '/inc/flash.php';
require __DIR__ . '/inc/header.php';
flash('greeting', 'Hi there', FLASH_INFO);
echo '<a href="page2.php" title="Go To Page 2">Go To Page 2</a>';
require __DIR__ . '/inc/footer.php';
Linguagem de código: PHP ( php )
O page1.php
arquivo possui um link para o arquivo page2.php
.
Por fim, mostre a mensagem de saudação no page2.php
arquivo chamando a flash()
função e passando o nome para ela:
<?php
session_start();
require __DIR__ . '/inc/flash.php';
require __DIR__ . '/inc/header.php';
flash('greeting');
require __DIR__ . '/inc/footer.php';
Linguagem de código: PHP ( php )
Se você abrir a page1.php
página e clicar no link, verá uma mensagem na page2.php
página.
Casos de uso de mensagens flash PHP
Na prática, você usará as mensagens flash em uma página de inscrição para redirecionar os usuários à página de login com uma mensagem de boas-vindas após a inscrição. Além disso, você usará as mensagens flash no padrão Post-Redirect-Get , que aprenderá no próximo tutorial.
Resumo
- Uma mensagem flash é criada em uma página e exibida uma vez em outra página.
- Use a
$_SESSION
variável superglobal para gerenciar as mensagens flash. - Use o
flash()
desenvolvido neste tutorial para gerenciar mensagens flash.