> For the complete documentation index, see [llms.txt](https://jjrdev.gitbook.io/luna/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jjrdev.gitbook.io/luna/notas-de-atualizacoes.md).

# 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**.
