Flash Messages

As mensagens flashs são importantes para personalizar a experiência do usuário com retorno de sucesso, erro ou outros tipos de avisos:

namespace App\Controllers\Pages;

use \App\Utils\Flash;

class Product {
    public static function getProduct($req, $res) {
        // ...
        Flash::create("productNotFound", "Produto não encontrado", FLASH_DANGER);
    }
}

Os tipos de flashs podem ser configurados no arquivo define.php:

Flash::define([
    'FLASH_ERROR' => 'error',
    'FLASH_DANGER' => 'danger',
    'FLASH_WARNING' => 'warning',
    'FLASH_INFO' => 'info',
    'FLASH_SUCCESS' => 'success'
]);

Os valores exibidos no Flash::define acima são os valores pré definidos pelo Luna. Esses serão os tipos das mensagens para que seja renderizada corretamente.

Após criar uma mensagem é possível renderiza-la para adicionar em uma view:

Flash::create("productNotFound", "Produto não encontrado", FLASH_DANGER);
$flash = Flash::render("productNotFound");

É possível também renderizar uma mensagem que não tenha sido criada previamente:

$flash = Flash::render(false, "Produto não encontrado", FLASH_DANGER);

O armazenamento das mensagens é realizado na variavel de sessão $_SESSION, não cria-la previamente pode ser útil quando a mensagem não for utilizada em outros locais.

Caso deseje, renderize diversas mensagens de uma vez (apenas para mensagens criadas previamente):

$flashs = Flash::renderAll(["productNotFound", "productOutOfStock"]);

Uma vez renderizada, adicione-a na view assim como outros parâmetros:

$content = View::render('pages/product', ['flash' => $flash]);

Certifique-se de adicionar o parâmetro {{flash}} ou correspondente na view que será utilizada.

O componente das mensagens flashs pode ser alterado em /resources/components/flash/alert.html.

Se necessário, crie outro componente no diretório e altere na criação ou renderização da mensagem:

Flash::create("productNotFound", "Produto não encontrado", FLASH_DANGER, 'alert-new');
// ou
Flash::render("Produto não encontrado", FLASH_DANGER, 'alert-new');

Last updated