Notas de atualizações

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

Antes:

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

Agora:

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

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:

<h1>{{name}}</h1>
<h2>{{categoryName}}</h2>
$product['categoryName'] = $product['category']['name']; // 😫
$content = View::render('product', $product);

Agora:

<h1>{{name}}</h1>
<h2>{{category->name}}</h2>
$content = View::render('product', $product);

Resultado:

<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}}.

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.

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

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:

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.

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

$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.

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:

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

Depois:

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

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

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.

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

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.

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

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

Leia a documentação aqui.

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

// ?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.

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

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

O padrão de retorno continua sendo text/html e pode ser alterado no .env em DEFAULT_CONTENT_TYPE` .

Leia a documentação aqui.

Versão estável inicial do Luna.

Last updated