# 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');
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jjrdev.gitbook.io/luna/o-basico/flash-messages.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
