PHP

25 set, 2019

Laravel 6 – Tudo sobre a nova versão

Publicidade

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!