Introdução ao Modelo MVC
O Model-View-Controller (MVC) é uma arquitetura de software que separa uma aplicação em três componentes principais: Modelo (Model), Vista (View) e Controlador (Controller). Esta separação facilita a organização do código, promovendo uma manutenção mais simples e uma escalabilidade eficiente.
Componentes do MVC
-
Modelo (Model) O Modelo é responsável pela lógica de dados da aplicação. Ele representa a estrutura dos dados que interagem com a base de dados. Em Laravel, os modelos correspondem às tabelas da base de dados e gerem a comunicação entre a aplicação e a base de dados.
// Exemplo de um modelo em Laravel namespace App\Models; use Illuminate\Database\Eloquent\Model; class Produto extends Model { protected $table = 'produtos'; protected $fillable = ['nome', 'descricao', 'preco']; }
-
Vista (View) A Vista é responsável pela apresentação dos dados ao utilizador. Em Laravel, as Vistas são ficheiros Blade (extensão .blade.php) que permitem inserir lógica de apresentação simples no HTML, facilitando a renderização dinâmica dos dados.
<!-- Exemplo de uma vista Blade --> <!DOCTYPE html> <html> <head> <title>Lista de Produtos</title> </head> <body> <h1>Produtos Disponíveis</h1> <ul> @foreach ($produtos as $produto) <li>{{ $produto->nome }} - €{{ $produto->preco }}</li> @endforeach </ul> </body> </html>
-
Controlador (Controller) O Controlador age como intermediário entre o Modelo e a Vista. Ele processa as requisições do utilizador, interage com o Modelo para obter os dados, e então seleciona a Vista apropriada para exibir esses dados.
// Exemplo de um controlador em Laravel namespace App\Http\Controllers; use App\Models\Produto; use Illuminate\Http\Request; class ProdutosController extends Controller { public function index() { $produtos = Produto::all(); return view('produtos.index', compact('produtos')); } public function show($id) { $produto = Produto::findOrFail($id); return view('produtos.show', compact('produto')); } }
Exemplo Prático
Imaginemos uma aplicação Laravel simples para gerir a lista de produtos de uma loja online. O fluxo para exibir a lista de produtos seria:
-
Rota: Definir uma rota que aponte para o método
index
doProdutosController
.use App\Http\Controllers\ProdutosController; Route::get('/produtos', [ProdutosController::class, 'index']);
-
Controlador: No
ProdutosController
, o métodoindex
obtém todos os produtos e passa-os para a Vista.public function index() { $produtos = Produto::all(); return view('produtos.index', compact('produtos')); }
-
Modelo: O modelo
Produto
representa a tabelaprodutos
na base de dados e é utilizado pelo controlador para obter os dados.class Produto extends Model { protected $table = 'produtos'; protected $fillable = ['nome', 'descricao', 'preco']; }
-
Vista: A vista
produtos/index.blade.php
exibe a lista de produtos.<!DOCTYPE html> <html> <head> <title>Lista de Produtos</title> </head> <body> <h1>Produtos Disponíveis</h1> <ul> @foreach ($produtos as $produto) <li>{{ $produto->nome }} - €{{ $produto->preco }}</li> @endforeach </ul> </body> </html>
Resumo
O modelo MVC é uma maneira eficaz de organizar o código numa aplicação web, dividindo responsabilidades entre a gestão de dados (Modelo), a apresentação de dados (Vista) e a lógica de aplicação e controlo do fluxo (Controlador). O Laravel adere a este padrão de forma robusta, facilitando a sua implementação através de classes e estruturas bem definidas.