# Notas de atualizações

## [v1.0.5](https://github.com/jjr-dev/luna/releases/tag/v1.0.5)

### [Renderização múltipla de componentes](https://github.com/jjr-dev/luna/commit/94fb8fac1ea7f95d0acf8ab7e8e1ed2f48e072b1#diff-029c018b54a3faaf1bc0d029616566994cf49e6f604b51f963ea3cbe9c2d890a)

Nova função `multiRender()` para renderização múltipla de componentes semelhantes com dados diferentes utilizando um `array` numérico.

#### Antes:

```php
$products = ProductService::list();
$productElements = "";
foreach($products as $product) {
    $productElements .= Component::render('product-box', $product);
}
return $productElements;
```

#### Agora:

```php
$products = ProductService::list();
return Component::multiRender('product-box', $products);
```

### [Melhoria de renderização de array](https://github.com/jjr-dev/luna/commit/94fb8fac1ea7f95d0acf8ab7e8e1ed2f48e072b1#diff-6a55fe49947aaa166b4b2efdbd35776d46ca5f09e946084e5e777fea61eb24ab)

Buscando uma melhor forma de renderizar views e components utilizando um array, agora é possível acessar valores em diferentes níveis, como por exemplo, para renderizar o valor de $product\['category']\['name'] :

#### Antes:

```html
<h1>{{name}}</h1>
<h2>{{categoryName}}</h2>
```

```php
$product['categoryName'] = $product['category']['name']; // 😫
$content = View::render('product', $product);
```

#### Agora:

```html
<h1>{{name}}</h1>
<h2>{{category->name}}</h2>
```

```php
$content = View::render('product', $product);
```

#### Resultado:

```html
<h1>Produto Nome</h1>
<h2>Categoria Nome</h2>
```

Os valores podem ser acessados utilizando `->`, para acessar `$product['category']['icon']['full']` por exemplo, deve-se utilizar `{{category->icon->full}}`.

### [Envio de variáveis em `getPage()`](https://github.com/jjr-dev/luna/commit/94fb8fac1ea7f95d0acf8ab7e8e1ed2f48e072b1#diff-799f866c6f639a0d00aeea3a68578870bc94add691c821284da2a84517f4deb5)

Para melhorar a renderização da função `getPage()`, agora a variável `$opts` pode receber múltiplos itens, anteriormente era possível utilizar apenas os valores para `header`, `footer` e `seo`. Essa atualização permite que valores de variáveis para renderização da página sejam enviados corretamente.

## [v1.0.4](https://github.com/jjr-dev/luna/releases/tag/v1.0.4)

### [Compatibilidade com PHP 8](https://github.com/jjr-dev/luna/commit/c3f807d16a9518a53bcbb499e98b223bbe7d6005)

A função `setConfigs()` do arquivo `app/Db/Database.php` foi levemente corrigida para que seja utilizada corretamente como `Static` e resolver o erro que ocorria ao tentar utilizar o Luna no PHP 8 em diante.

> O erro não ocorre nas versões do PHP 7

### [Remoção de uso de funções nativas para gerenciamento de Environment](https://github.com/jjr-dev/luna/commit/7e15c1251f1e1c7d977e370fc807ade5ffa70d9c)

Buscando evitar problemas com servidores ou erros de gerenciamento de valores nativos do PHP, a classe `Environment` sofreu alterações para utilizar a variável global `$_ENV` ao invés das funções nativas `putenv()` ou `getenv()`.

Com a alteração, os valores informados no arquivo `.env` agora devem ser obtidos utilizando a classe:

```php
use \App\Common\Environment as Env;

Env::get($key); // Obter item específico
Env::get(); // Obter todos os items
```

Todas as classes e arquivos do Luna que utilizavam as funções nativas foram modificadas para utilizar a classe atualizada.

## [v1.0.3](https://github.com/jjr-dev/luna/releases/tag/v1.0.3)

### [Search Engine Optimization (SEO)](https://github.com/jjr-dev/luna/commit/4e4ec50ab98469f4c1f3ced8ea02136a7bc5d6a4)

Configurações de SEO fácil e rápida na renderização da página ou view:

```php
$seo = new Seo();
$seo->setTitle("Produto nome");
$seo->setDescription("Produto descrição");
$seo->setKeywords(["produto-chave-1", "produto-chave-2"]);
```

Leia a documentação [aqui](/luna/o-basico/seo.md).

### [Alteração na renderização da página](https://github.com/jjr-dev/luna/commit/4e4ec50ab98469f4c1f3ced8ea02136a7bc5d6a4)

O *header* e *footer* agora fazem parte de um *array* de configurações opcionais. A alteração ocorreu devido a necessidade de novas informações na renderização da página, como o SEO:

**Antes:**

```php
$content = parent::getPage("Página administrativa", $content, 'header-admin', 'footer-admin');
```

**Depois:**

```php
$content = parent::getPage("Página administrativa", $content, [
    'header' => 'header-admin',
    'footer' => 'footer-admin'
]);
```

### [Definições de variáveis em arquivo isolado](https://github.com/jjr-dev/luna/pull/34/commits/b17335f27b33f5ace7d56c8a59a58483e89de8a1)

Para evitar que, em etapa de desenvolvimento ou de manutenções, o arquivo `index.php` sofresse modificações, as configurações das variáveis padrões das views (antigo `View::init`) `View::define` e as variáveis das flash messages `Flash::define` foram movidas para o arquivo `define.php`, isolando o arquivo para exclusivamente definições de variáveis e permitindo que o arquivo `index.php` não exija alterações durante o desenvolvimento.

### Correções de erros

#### [Paginação com zero itens](https://github.com/jjr-dev/luna/commit/ee1b67e3ce65816589a2a1c36abb665e5373c053)

Quando uma páginação estava vazia (zero itens resultantes) a renderização da páginação era problemática, uma simples correção de retorno resolveu o problema.

#### [Envio de headers no response](https://github.com/jjr-dev/luna/commit/f1c24ff57668bc9c995cf34f814966987f647efa)

Os `headers` do retorno da requisição não eram corretamente enviados devido ao uso incorreto da variável `$this->headers`.&#x20;

#### [Avisos do PHP](https://github.com/jjr-dev/luna/commit/f1c24ff57668bc9c995cf34f814966987f647efa)

Alguns avisos (WARNING ou ALERT) geram logs desnecessários, algumas correções foram realizadas para que não ocorra, como:

* Variável `$response` definida previamente no método `next` de `Middleware.php`;
* Definição de variáveis de ambiente do arquivo `.env` corrigidas em caso de linha em branco para evitar o uso do método `putenv` em strings vazias;
* Correção de uso da string `DEFAULT_CONTENT_TYPE` de variável para string, o aviso poderia se tornar um erro fatal em futuras atualizações do PHP.

## [v1.0.2](https://github.com/jjr-dev/luna/releases/tag/v1.0.2)

### [Flash Messages](https://github.com/jjr-dev/luna/pull/29/commits/8abd15e99a2d0fe8fdd05d734167ee605a703e0a)

Criação e renderização de *flash messages* na view:

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

Leia a documentação [aqui](/luna/o-basico/flash-messages.md).

## [v1.0.1](https://github.com/jjr-dev/luna/releases/tag/v1.0.1)

### [Funções para obter parâmetros e outros dados da requisição atualizadas:](https://github.com/jjr-dev/luna/commit/0729d2851e838bdcd635fe855a31431eb2d6544c)

```php
$req->header(); // getHeaders();
$req->query();  // getQueryParams();
$req->body();   // getPostVars();
$req->param();  // getPathParams();
```

Agora também é possível obter um parâmetro específico utilizando o método:

```php
// ?id=1
$id = $req->query('id');
var_dump($id); // 1
```

> As classes `Pagination` e `Cache` foram atualizadas para suportar as atualizações.

Leia a documentação [aqui](/luna/o-basico/controllers.md#obtendo-dados-da-requisicao).

### [Alias para método de resposta](https://github.com/jjr-dev/luna/commit/05da7f59a1b174e3b786de4256d41f2c134ce091)

As respostas do `$response` agora podem conter *alias* para facilitar a definição:

```php
$res->send(200, $content, 'json');
// $res->send(200, $content, 'application/json');
$res->send(200, $content, 'html');
// $res->send(200, $content, 'text/html');
```

{% hint style="info" %}
O padrão de retorno continua sendo `text/html` e pode ser alterado no `.env` em `DEFAULT_CONTENT_TYPE`\` .
{% endhint %}

Leia a documentação [aqui](/luna/o-basico/controllers.md#padrao-de-retorno).

## [v1.0](https://github.com/jjr-dev/luna/releases/tag/v1.0)

Versão estável inicial do **Luna**.


---

# 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/notas-de-atualizacoes.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.
