Controllers no Laravel

Laravel
Tempo de leitura: 4 minutos

Controllers no Laravel: Os Controladores (Controllers) são classes PHP que atuam como intermediários entre as requisições do usuário (definidas nas Rotas) e a lógica de negócio (Models e Views). Eles são cruciais no padrão MVC (Model-View-Controller), pois recebem as requisições HTTP, executam a lógica necessária e retornam a resposta apropriada.

No Laravel 12, os Controllers continuam sendo o melhor lugar para organizar o fluxo de uma aplicação, facilitando a manutenção, testabilidade e escalabilidade.

1. 🎯 O Papel Central do Controller

Um Controller é responsável por gerenciar um conjunto de ações relacionadas a uma funcionalidade ou recurso (ex: UserController gerencia tudo sobre usuários).

Funções Principais:

  • Recepção: Recebe a requisição HTTP (acesso via URL) redirecionada pelo sistema de Routing.
  • Processamento: Acessa e manipula dados (via Models), realiza validação, e executa a lógica de negócio.
  • Resposta: Retorna uma resposta HTTP: uma View (HTML), um objeto JSON, ou um Redirecionamento.

Criando um Controller

Utilize o comando Artisan para gerar a estrutura básica da classe:

Bash

php artisan make:controller UserController
# Cria a classe em app/Http/Controllers/UserController.php

2. 📝 Estrutura e Métodos Básicos

Todo Controller deve estender a classe base Illuminate\Routing\Controller.

Exemplo de Método index()

O método abaixo é um exemplo de como um Controller usa o Eloquent ORM para obter dados e passá-los para uma View.

PHP

<?php
// app/Http/Controllers/UserController.php

namespace App\Http\Controllers;

use App\Models\User; // Importa o Model
use Illuminate\Http\Request;

class UserController extends Controller
{
    // Método que lida com a requisição GET /users
    public function index()   
    {
        // 1. Processamento: Busca todos os usuários do banco de dados (via Model)
        $users = User::all();
        
        // 2. Resposta: Retorna a view 'users.index', passando os dados.
        return view('users.index', compact('users'));   
    }
}

Relacionando com a Rota

Você associa o Controller à rota no arquivo routes/web.php:

PHP

use App\Http\Controllers\UserController;

// Mapeia a requisição GET /users para o método index do UserController
Route::get('/users', [UserController::class, 'index']);

3. 📥 Recebendo Dados e Injeção de Dependências

O Laravel utiliza o Service Container para injetar automaticamente dependências nos métodos do seu Controller.

A. Recebendo a Requisição (Request)

O objeto Request encapsula todos os dados da requisição HTTP (dados de formulário, parâmetros de URL, headers). Você o injeta no método:

PHP

use Illuminate\Http\Request;

public function store(Request $request)
{
    // Validação dos dados de entrada
    $validated = $request->validate([
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',   
    ]);
    
    // Cria o novo registro no banco de dados
    User::create($validated);
    
    // Retorna um redirecionamento como resposta
    return redirect()->route('users.index');   
}

B. Injeção de Modelos (Route Model Binding)

Se sua rota tem um parâmetro que corresponde a um Model, o Laravel pode injetar a instância do Model diretamente.

  • Rota: Route::get('/users/{user}', [UserController::class, 'show']);
  • Controller:

PHP

use App\Models\User;

// O Laravel busca o Usuário com base no {user} da URL
public function show(User $user) 
{
    // Você pode usar a variável $user diretamente sem fazer User::find($id)
    return view('users.show', compact('user'));
}

4. 🔗 Controller de Recursos (Resource Controllers)

Para operações CRUD (Create, Read, Update, Delete) padrão, o Laravel fornece os Resource Controllers, que mapeiam automaticamente 7 ações CRUD para 7 métodos HTTP padrão.

A. Geração

Bash

php artisan make:controller UserController --resource

B. Definição da Rota

Uma única linha no arquivo de rotas define todos os 7 endpoints:

PHP

// routes/web.php
Route::resource('users', UserController::class); // Usa a sintaxe de classe no Laravel 12
Método HTTPURIMétodo do ControllerPropósito
GET/usersindexListar todos os recursos
POST/usersstoreCriar um novo recurso
GET/users/createcreateExibir formulário de criação
GET/users/{user}showExibir um recurso específico
PUT/PATCH/users/{user}updateAtualizar um recurso
GET/users/{user}/editeditExibir formulário de edição
DELETE/users/{user}destroyExcluir um recurso

✅ Conclusão Controllers no Laravel

Controllers no Laravel: Os Controllers são o coração da lógica de controle do Laravel. Eles implementam o “C” do MVC, separando a lógica de negócio do front-end e dos dados. A utilização de Injeção de Dependências (como o Request e Route Model Binding) e a conveniência dos Resource Controllers são características que tornam o desenvolvimento de aplicações CRUD complexas rápido, organizado e altamente 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.