Requests no Laravel

Laravel
Tempo de leitura: 4 minutos

Requests no Laravel: Em qualquer aplicação web, a forma como lidamos com os dados recebidos dos clientes (Requisições HTTP) é crucial para a segurança e a lógica de negócio. No Laravel 12, o objeto Illuminate\Http\Request encapsula todos os dados de entrada (formulário, URL, headers, arquivos) e oferece uma API elegante e segura para acessá-los.

Neste artigo, exploraremos a injeção do objeto Request, os métodos de acesso aos dados e a importância do Form Request para a validação.

1. 💉 Injeção e Acesso Básico aos Dados

O Laravel utiliza o Service Container para injetar automaticamente a instância de Request em qualquer método de Controller ou Closure de rota que a declare como tipo.

Injeção no Controller

Basta tipar o primeiro argumento do método com a classe Request:

PHP

<?php
// Exemplo em App\Http\Controllers\PostController.php

use Illuminate\Http\Request;

class PostController extends Controller
{
    // O Laravel injeta a requisição HTTP atual na variável $request
    public function store(Request $request)   
    {
        // Acessando campos de formulário
        $title = $request->input('title');
        
        // Acessando via notação de propriedade (convenção limpa)
        $content = $request->content; 

        // ... lógica de salvamento
    }
}

Métodos Chave para Acessar Dados

MétodoFunçãoExemplo
$request->all()Retorna todos os dados da requisição (GET e POST) como um array.['title' => 'Novo Post', 'content' => '...']
$request->only(...)Retorna apenas os campos listados (seguro para mass assignment).$request->only(['title', 'content'])
$request->except(...)Retorna todos os dados, exceto os campos listados.$request->except(['_token', 'password_confirmation'])
$request->has('field')Verifica se um campo existe na requisição.if ($request->has('title'))
$request->filled('field')Verifica se um campo existe E não está vazio (não é null, false ou "").if ($request->filled('email'))

2. 🛡️ Validação de Dados: O Ponto de Segurança

A validação é a etapa mais crítica no processamento de uma requisição. O Laravel oferece dois caminhos principais para validar dados, ambos retornando automaticamente o usuário com erros em caso de falha.

A. Validação Direta no Controller

Você pode usar o método validate() diretamente no objeto Request. Se a validação falhar, o Laravel interrompe a execução e redireciona o usuário de volta com os erros e o Old Input (dados antigos).

PHP

public function store(Request $request)
{
    // Lançará um erro se as regras não forem atendidas
    $validatedData = $request->validate([
        'title' => 'required|min:5|max:255', // Requerido, min 5, max 255
        'content' => 'required',
        'email' => 'email|unique:users', // Deve ser email válido, único na tabela users
    ]);

    // O código só prossegue se a validação for bem-sucedida
    // ...
}

B. Form Requests (A Melhor Prática)

Para rotas mais complexas ou para manter o Controller limpo, o Form Request é a solução padrão do Laravel. Ele é um objeto de validação dedicado.

1. Criando o Form Request

Bash

php artisan make:request StorePostRequest
# Cria a classe em app/Http/Requests/StorePostRequest.php

2. Definindo Regras

No arquivo gerado, você define as regras e o método authorize().

PHP

// app/Http/Requests/StorePostRequest.php
class StorePostRequest extends FormRequest
{
    // Lógica de Autorização (Permissão de Acesso)
    public function authorize(): bool
    {
        // Retorna true para permitir a requisição se o usuário estiver logado
        return auth()->check(); 
    }

    // Lógica de Validação
    public function rules(): array
    {
        return [
            'title' => 'required|min:5|max:255',
            'content' => 'required',
        ];
    }
}

3. Injeção no Controller

Ao invés de injetar a classe Request, injete seu Form Request customizado no método do Controller. O Laravel executará a validação antes de chamar o método.

PHP

// O Controller não precisa mais chamar $request->validate()
public function store(StorePostRequest $request) 
{
    // Se chegou aqui, a requisição é válida e autorizada.
    // ...
}

3. 🖼️ Tratamento de Erros de Validação e Old Input

Quando a validação falha (seja via validate() ou Form Request), o Laravel garante uma experiência suave para o usuário:

A. Exibição de Erros ($errors)

O Laravel injeta automaticamente a variável especial $errors (que contém um Bag de erros de validação) em todas as Views.

HTML

@if ($errors->any())
    <div class="alert alert-danger">
        Opa! Algo deu errado nos seus dados:
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

B. Manutenção de Dados Antigos (@old)

O Input anterior do formulário é salvo na sessão e pode ser recuperado para preencher os campos automaticamente, evitando que o usuário tenha que digitar tudo novamente.

HTML

<input type="text" name="title" value="{{ old('title') }}" id="title">

4. 🗄️ Acesso a Outros Dados da Requisição

A classe Request também fornece métodos para acessar dados além dos campos de formulário:

  • URL: $request->url() (URL base) ou $request->fullUrl() (com query string).
  • Método: $request->method() (GET, POST, etc.) ou $request->isMethod('POST').
  • Headers: $request->header('User-Agent').
  • Arquivos: $request->file('avatar') (retorna uma instância de UploadedFile).

✅ Conclusão Requests no Laravel

Requests no Laravel: A classe Request é a principal interface para interagir com os dados do cliente. Utilize a Injeção de Dependências para acessá-la e, preferencialmente, use Form Requests para centralizar a lógica de Autorização e Validação, mantendo seus Controllers focados na lógica de negócio principal. Isso resulta em código mais seguro, limpo e testável.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.