# 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:

```php
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`:

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

{% hint style="info" %}
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.
{% endhint %}

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

```php
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:

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

{% hint style="info" %}
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.
{% endhint %}

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

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

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

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

{% hint style="info" %}
Certifique-se de adicionar o parâmetro `{{flash}}` ou correspondente na view que será utilizada.
{% endhint %}

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:

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

