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étodo | Função | Exemplo |
$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 deUploadedFile).
✅ 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:
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:















