Sistemas

Laravel 13 na prática: menos retrabalho para construir sistemas melhores

Filas, cache, APIs, IA e busca por significado: veja como o Laravel 13 ajuda a resolver dores de sistemas e como aproveitar o PHP 8.5 nessa combinação.

Ilustração de uma bancada de desenvolvimento com módulos vermelhos, notebook e elefante roxo, acompanhada dos títulos Laravel 13 e PHP 8.5.
Laravel 13 e PHP 8.5: recursos para organizar aplicações e simplificar o trabalho de quem desenvolve. · Crédito: Ilustração editorial criada com inteligência artificial para ernani.dev.

No artigo sobre o PHP 8.5, vimos melhorias que deixam o código mais fácil de acompanhar. Agora vamos subir um andar e conversar sobre o Laravel 13.

Se você mantém um sistema, provavelmente conhece a cena: a funcionalidade parece simples, mas logo aparecem as filas, a API, o cache, a busca e aquela integração de IA que entrou na lista de pedidos. Quando percebe, boa parte do tempo foi para a estrutura que faz tudo isso funcionar.

O Laravel 13 traz novidades úteis para essa rotina. Lançado em 17 de março de 2026, ele exige PHP 8.3 no mínimo e tem o PHP 8.5 entre as versões oficialmente suportadas. Vale entender a combinação: o PHP é a linguagem que executa a aplicação; o Laravel oferece a estrutura e as ferramentas para organizá-la.

Vamos aos problemas que essas novidades ajudam a resolver, com exemplos de sistemas de verdade.

Notas oficiais do Laravel 13 e compatibilidade com PHP.

1. Filas: cada tarefa no lugar certo, sem espalhar configuração

Imagine uma importação de milhares de produtos e um e-mail de confirmação. Você quer organizar esses trabalhos em filas diferentes, com processos preparados para cada carga.

O Laravel já tinha filas. A novidade do 13 é Queue::route(), que permite centralizar o destino padrão de cada classe de job.

Considerando que os dois jobs já existam e implementem ShouldQueue, este é um trecho do AppServiceProvider:

use App\Jobs\ImportarProdutos;
use App\Jobs\EnviarConfirmacao;
use Illuminate\Support\Facades\Queue;

public function boot(): void
{
    Queue::route(
        ImportarProdutos::class,
        connection: 'redis',
        queue: 'importacoes',
    );

    Queue::route(
        EnviarConfirmacao::class,
        connection: 'redis',
        queue: 'emails',
    );
}

A dor que diminui: repetir a escolha de fila em todos os lugares que disparam uma tarefa. Se a organização mudar, existe um ponto central para ajustar esses padrões.

A conexão Redis e os workers, que são os processos que executam os trabalhos, precisam estar configurados. O roteamento define destinos; a capacidade de processamento depende da infraestrutura. Configurações explícitas de um job também podem sobrescrever o padrão.

Documentação de filas e conexões.

Diagrama do Laravel 13 mostrando ImportarProdutos na fila importacoes e EnviarConfirmacao na fila emails, com workers separados e regras centralizadas usando Queue::route.

Queue::route centraliza o destino padrão de cada classe de job. Os workers precisam estar configurados para atender as filas. Ilustração didática produzida para ernani.dev.

2. Cache: dar mais tempo a uma informação que continua útil

O usuário enviou uma planilha, o sistema preparou uma prévia da importação e agora ele está conferindo os dados. Faz sentido manter essa prévia temporária disponível enquanto a conferência continua.

Com Cache::touch(), você pode renovar a expiração de um item existente sem buscar e gravar seu conteúdo novamente:

use Illuminate\Support\Facades\Cache;

$renovado = Cache::touch(
    'preview:importacao:42',
    now()->addMinutes(15),
);

Nesse exemplo, se a chave existir, o novo vencimento fica definido para daqui a 15 minutos. O retorno informa se a operação funcionou.

Onde ajuda: prévias temporárias, resultados intermediários e outros dados que ainda são válidos, mas precisam de um novo prazo de permanência.

Há uma diferença importante entre renovar a validade e atualizar a informação: touch() não recalcula o conteúdo. E, se a chave já expirou, retorna false; reconstruir a prévia continua sendo tarefa da aplicação.

Documentação de renovação do cache.

3. APIs: menos discussão sobre o formato de cada resposta

Quem já integrou sistemas conhece o problema: um endpoint devolve o produto dentro de data, outro mistura atributos com metadados e um terceiro organiza os relacionamentos de outro jeito. O aplicativo consumidor precisa aprender todas essas variações.

O Laravel 13 inclui recursos JSON:API, voltados a uma especificação que padroniza essa estrutura. Para criar um recurso nesse formato, existe o comando php artisan make:resource ProdutoResource --json-api.

Um exemplo de classe:

namespace App\Http\Resources;

use Illuminate\Http\Resources\JsonApi\JsonApiResource;

class ProdutoResource extends JsonApiResource
{
    public $attributes = [
        'nome',
        'preco_centavos',
    ];
}

Com o model do produto carregado, o controller pode retornar new ProdutoResource($produto), usando a classe importada. O recurso organiza a resposta segundo JSON:API e define o cabeçalho correspondente.

A dor que diminui: reinventar o contrato de resposta a cada endpoint, especialmente quando vários aplicativos ou equipes consomem a mesma API.

O suporte é específico ao padrão JSON:API. Ele cuida da serialização das respostas; filtros e ordenação de consultas recebidas ainda precisam de implementação ou ferramentas adicionais.

Documentação de recursos JSON:API.

4. IA no sistema com uma interface mais consistente

Vamos imaginar um recurso para resumir descrições de produtos. A ideia é pequena, mas pode render bastante código de integração se cada serviço de IA entrar no projeto de um jeito diferente.

Um dos destaques do ecossistema que acompanha o Laravel 13 é o Laravel AI SDK. Esse pacote oficial oferece uma interface comum para trabalhar com agentes, geração de texto e outros recursos de IA.

Depois de instalar laravel/ai e configurar um provedor com suas credenciais, um exemplo simples fica assim:

use function Laravel\Ai\agent;

$resposta = agent(
    instructions: 'Resuma a descrição em uma frase clara. '
        .'Use apenas as informações fornecidas.',
)->prompt(
    'Suporte articulado para celular, com ajuste de ângulo '
    .'e base para uso sobre a mesa.'
);

echo (string) $resposta;

Onde ajuda: resumos de chamados, sugestões de descrição e assistentes que trabalham com informações do próprio sistema. A estrutura comum reduz o código específico de cada integração.

O SDK é um pacote separado, e os recursos disponíveis variam conforme o provedor. Atualizar o framework não configura a IA automaticamente. O texto gerado também merece conferência antes de ser utilizado.

Documentação do Laravel AI SDK.

5. Busca: encontrar o produto mesmo quando o cliente usa outras palavras

O catálogo diz “organizador de cabos”. O cliente pesquisa “algo para organizar os fios da mesa”. Dependendo da implementação, uma busca baseada apenas na coincidência de palavras pode deixar passar um resultado útil.

O Laravel 13 oferece suporte a consultas vetoriais que ajudam a construir buscas por significado. Elas usam embeddings: representações numéricas do conteúdo que permitem comparar similaridade.

Com os produtos já preparados e seus embeddings armazenados, uma consulta pode ser:

use Illuminate\Support\Facades\DB;

$produtos = DB::table('produtos')
    ->whereVectorSimilarTo(
        'embedding',
        'algo para organizar os fios da mesa',
    )
    ->limit(5)
    ->get(['id', 'nome']);

A dor que diminui: exigir que a pessoa adivinhe exatamente as palavras usadas no cadastro.

Esse exemplo pressupõe coluna vetorial, embeddings compatíveis, Laravel AI SDK e provedor configurado. Ao receber uma string, o recurso gera o embedding da consulta. Também é necessário um banco compatível, como PostgreSQL com a extensão pgvector.

Os resultados dependem dos dados, do modelo e dos ajustes da busca. O cenário acima ilustra uma aplicação possível; a qualidade deve ser avaliada com pesquisas reais dos usuários.

Documentação de busca semântica e vetorial.

6. E onde o PHP 8.5 entra nessa história?

O Laravel cuida de boa parte da organização da aplicação, e o PHP 8.5 oferece recursos que você pode usar na lógica escrita dentro dela.

Um exemplo é combinar o operador pipe com uma função do Laravel para transformar o nome de um produto em um slug, aquele texto amigável usado em endereços:

use Illuminate\Support\Str;

$slug = '  Kit de ferramentas  '
    |> trim(...)
    |> (fn(string $nome) => Str::slug($nome));

echo $slug; // kit-de-ferramentas

O fluxo fica explícito: receber o nome, retirar espaços das pontas e gerar o slug. Str::slug() é uma ferramenta do Laravel que já existia; |> é o recurso introduzido pelo PHP 8.5.

Por isso, esse trecho exige PHP 8.5, mesmo que o Laravel 13 também funcione com versões anteriores da linguagem dentro da faixa suportada. Confirme a versão usada pelo servidor web, pelo terminal e pelos workers.

Também dá para aproveitar os recursos de clonagem, arrays e avisos de retorno que expliquei no artigo anterior sobre PHP 8.5, conforme eles fizerem sentido no projeto.

Documentação do pipe no PHP e de strings no Laravel.

Atualizar com um objetivo deixa tudo mais simples

Minha sugestão é escolher uma dor concreta para começar: organizar as importações, padronizar uma API ou melhorar a busca de um catálogo. Assim, fica mais fácil avaliar o benefício da atualização no seu sistema.

Antes de mudar o ambiente de produção, confira a compatibilidade das dependências e exercite os fluxos principais em testes. Login, APIs, filas, cache e integrações são bons candidatos. O guia oficial de atualização para o Laravel 13 detalha as mudanças que merecem atenção.

A combinação Laravel 13 + PHP 8.5 abre boas oportunidades para reduzir tarefas repetitivas e escrever uma aplicação mais fácil de manter. Cada recurso pode entrar onde resolve um problema real, sem transformar a atualização em uma obrigação de reescrever tudo.

E, convenhamos: quanto menos tempo gasto repetindo configuração, mais tempo sobra para desenvolver aquilo que o usuário realmente pediu.

Qual dessas melhorias resolveria uma dor do seu sistema hoje?

EN

Ernani Nascimento

Desenvolvimento de sistemas, inteligência artificial, automações, dados e jogos. Um espaço para compartilhar experiências e aprendizados construindo projetos reais.

Conheça o autor ↗

Continue explorando.

DA IDEIA À PRÁTICA

Tem algo em mente?
Vamos construir.

Vamos conversar ↗