Já faz alguns meses que o criador do Laravel, Taylor Otwell, está testando a versão 6.0. No dia 03 de Setembro de 2019 finalmente foi liberado o Laravel 6.0 e este artigo trata justamente dessa nova atualização e todas as mudanças. Vamos abordar a teoria e a prática para que você já comece a usar hoje.
Quais são as novidades?
- 1- Versionamento Semântico
O Laravel teve grandes atualizações em todas as versões principais, o que é bastante comum frameworks jovens. Todas as atualizações do 5.x lançaram as bases para uma estrutura estável e robusta. No futuro, com o 6.0, não será preciso se preocupar tanto com grandes mudanças e reescritas a cada nova atualização. Devido a essa nova estabilidade, o pacote de estrutura do Laravel está adotando oficialmente o versionamento semântico mais tradicional.
2 – As respostas de autorização foram aprimoradas
O processo de personalização das mensagens de erro foi facilitado. O Laravel 6 traz um método “Gate::inspect()” que retorna a resposta da autenticação.
-
// Resposta de autorização retornada pelo Gate $resposta = Gate::inspect('edit'); if ($resposta->allowed()) { // Permite que o usuário edite } else { // Mensagem de erro // 'Você deve ser um administrador para editar.' echo $resposta->message(); }
- 3 – Novo recurso de middleware na classe Job
O Job Middleware é um recurso em que o próprio Taylor contribuiu. Esse novo recurso do Laravel 6 permite que os trabalhos sejam executados no middleware.
// Método middleware adicionado a uma classe Job
public function middleware()
{
return [new SeuMiddleware];
}
// Informe qual middleware usar ao disparar um Job
SeuJob::dispatch()->through([new SeuMiddleware]);
O middleware ajudará você a evitar lógica avançada no corpo do método handle() da sua classe Job.
- 4 – Lazy Collections
O Laravel 6.0 traz o recurso de lazy collections, o que permitirá manter baixo o uso de memória ao lidar com dados pesados.
Se você estiver trabalhando com o Eloquent, poderá optar por carregar um Model de cada vez, em vez de tudo de uma vez, usando o método cursor() em vez de all().
// Imagine que você tenha muitos posts
// Dessa forma você estará carregando todos eles de uma vez só
$posts = App\Post::all()->filter(function ($post) {
return $post->id > 500;
});
Ao mudar de all() para cursor(), apenas um Model é carregado na memória por vez, porque o método cursor() usa a nova instância LazyCollection.
-
$posts = App\Post::cursor()->filter(function ($post) { return $post->id > 500; }); foreach ($posts as $post) { echo $post->id; }
5 – Novos recursos de query Eloquent
Esta nova versão oferece ainda mais ajuda quando se trata de executar subquerys ou uma consulta dentro de uma consulta, em uma única chamada.
É muito útil quando você precisa selecionar informações de duas tabelas com um relacionamento. Nas versões do Laravel 5.x, os recursos de subconsulta eram limitados e muitas vezes acabava por encadear uma consulta usando DB::raw().
- O método addSelect foi adicionado às subconsultas,
- Subconsultas agora também terão acesso ao método orderBy.
Neste exemplo, imagine que você tem 2 tabelas: hotéis e reservas. Você quer saber o tipo de quarto mais recente que foi reservado para um hotel específico. Em vez de fazer duas consultas separadas, agora você pode fazer isso:
-
use App\Reserva; use App\Hotel; return Hotel::addSelect(['ultimo_quarto_alugado' => Reserva::select('tipo') ->whereColumn('id_hotel', 'hoteis.id') ->orderBy('created_at', 'desc') ->latest() ->limit(1) ])->get();
6 – Pacote Laravel UI
As ferramentas de front-end fornecido com as versões do Laravel 5.x agora foram extraído para um pacote separado chamado laravel/ui. Isso permite que os arquivos de front-end sejam iterados separadamente da estrutura principal.
O pacote agora inclui predefinições para React, Vue e Bootstrap. Em um tweet em maio, Taylor mencionou que ele está pensando em adicionar uma opção para o Tailwind também!
Se você ainda quiser incluir, é possível trazê-lo de volta com o comando
composer require laravel/ui.
Além dessas novidades, o Laravel passou por uma reformulação na sua marca, entra lá no site oficial para conferir!