Mensagens Flash PHP

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 $_SESSIONvariável superglobal.

Por exemplo, você pode adicionar uma mensagem na $_SESSIONprimeira 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 $_SESSIONvariável e atribuí-la a uma variável. Em seguida, você exclui a mensagem $_SESSIONe 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 alerte alert-$typepara 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, messagee typepara 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 namepara 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.phpLinguagem de código:  texto simples  ( texto simples )

Segundo, coloque todas as funções acima no flash.phparquivo.

Terceiro, adicione o seguinte código ao header.phparquivo. Os header.phplinks para o style.cssarquivo na csspasta:

<!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.phparquivo:

</body>
</html>Linguagem de código:  HTML, XML  ( xml )

Quinto, crie uma mensagem flash no page1.phparquivo 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.phparquivo possui um link para o arquivo page2.php.

Por fim, mostre a mensagem de saudação no page2.phparquivo 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.phppágina e clicar no link, verá uma mensagem na page2.phppá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 $_SESSIONvariável superglobal para gerenciar as mensagens flash.
  • Use o flash()desenvolvido neste tutorial para gerenciar mensagens flash.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *