Controllers no Laravel
No Laravel, os controllers desempenham um papel fundamental ao organizar e gerenciar a lógica da aplicação associada às rotas. Eles ajudam a estruturar o código de forma clara e limpa, seguindo o padrão MVC (Model-View-Controller), melhorando a manutenibilidade e legibilidade do projeto.
Neste artigo, você vai aprender o que são controllers, como criá-los, utilizá-los e explorará diferentes formas de torná-los mais eficientes.
O que é um Controller?
Um controller no Laravel é uma classe que atua como intermediária entre as rotas e o restante da lógica do aplicativo. Ele permite que você agrupe a lógica de uma rota em métodos específicos, facilitando a organização e reutilização do código.
Tipos de Controller
Controller básico
Um controller básico é uma classe com métodos que definem o comportamento das rotas.
Criando um controller básico via artisan
O Laravel oferece o comando artisan
para gerar controllers de forma rápida e prática.
php artisan make:controller HomeController
Veja um exemplo da estrutura do controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index()
{
return view('home'); // Retorna a view 'home.blade.php'
}
}
Aqui, o método index
será chamado pela rota correspondente e retornará a view home
.
Exemplo do controller sendo chamado no arquivo de rotas routes/web.php
:
<?php
use App\Http\Controllers\HomeController;
Route::get('/home', [HomeController::class, 'index']);
Nesse exemplo, o método index
da classe HomeController
será chamado quando a rota /home
for acessada.
Controller de Recursos (Resource Controller)
Os controllers de recursos seguem as convenções RESTful e fornecem métodos predefinidos para operações CRUD (Create, Read, Update e Delete). Eles ajudam a criar APIs e rotas de forma rápida e padronizada.
Criando um controller de recursos via artisan
php artisan make:controller PostController --resource
Métodos gerados por um Resource Controller:
-
index
– Exibe uma lista de recursos. -
create
– Mostra o formulário para criar um novo recurso. -
store
– Processa os dados enviados para criar um novo recurso. -
show
– Exibe um recurso específico. -
edit
– Mostra o formulário para editar um recurso. -
update
– Processa os dados enviados para atualizar um recurso. -
destroy
– Exclui um recurso.
Exemplo de um Resource Controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
return "Lista de posts";
}
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
return "Salvar post: " . $request->input('title');
}
public function show($id)
{
return "Exibir post com ID: $id";
}
public function edit($id)
{
return view('posts.edit', ['id' => $id]);
}
public function update(Request $request, $id)
{
return "Atualizar post com ID: $id";
}
public function destroy($id)
{
return "Deletar post com ID: $id";
}
}
Associando um Resource Controller a rotas:
<?php
use App\Http\Controllers\PostController;
Route::resource('posts', PostController::class);
Isso cria automaticamente todas as rotas RESTful para o recurso posts
.
Controllers com Middlewares
Os middlewares podem ser aplicados nos controllers para proteger ou modificar o comportamento dos métodos.
Exemplo:
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth'); // Protege todas as rotas
$this->middleware('admin')->only('delete'); // Aplica apenas ao método delete
}
public function index()
{
return "Painel de administração";
}
public function delete($id)
{
return "Deletar item com ID: $id";
}
}
É isso ai
Os controllers no Laravel são fundamentais para manter sua aplicação organizada e modular. Desde controllers básicos até controllers de recursos e invocáveis, cada tipo tem seu propósito e aplicação ideal. Ao utilizar recursos como middlewares e injeção de dependências, você pode tornar sua aplicação mais robusta, segura e escalável.
Para mais detalhes e informações completas à respeito de controllers no Laravel, consulte a documentação oficial no endereço abaixo:
https://laravel.com/docs/11.x/controllers#writing-controllers