CodeExemplo do framework Igniter MVC (Model View Controller)
โก Resumo Inteligente
CodeO framework Igniter MVC divide uma aplicaรงรฃo em Modelo, Visรฃo e Controlador. O modelo lida com os dados e a lรณgica de negรณcios, o controlador coordena as requisiรงรตes e a visรฃo apresenta o resultado, proporcionando baixo acoplamento, flexibilidade e maior produtividade do desenvolvedor.

O que รฉ MVC?
MVC significa Model-View-Controller (Modelo-Visรฃo-Controlador). ร um padrรฃo arquitetural que divide a aplicaรงรฃo em trรชs componentes principais:
- O modelo lida com a lรณgica de negรณcios e as interaรงรตes com o banco de dados.
- O controlador coordena as atividades entre o modelo e a visualizaรงรฃo.
- A visualizaรงรฃo รฉ responsรกvel pela apresentaรงรฃo dos dados.
A seguir, apresentamos algumas das vantagens do padrรฃo arquitetural MVC:
- Acoplamento fraco โ os componentes existem e funcionam independentemente uns dos outros.
- Flexibilidade โ vocรช pode facilmente fazer alteraรงรตes em componentes individuais.
- Aumento da produtividade โ mais de uma pessoa pode trabalhar no projeto simultaneamente. Os desenvolvedores front-end podem trabalhar nas visualizaรงรตes e na apresentaรงรฃo, enquanto os desenvolvedores back-end se concentram nos modelos e, como o sistema รฉ fracamente acoplado, tudo funciona em conjunto no final.
Modelo
O modelo รฉ responsรกvel por interagir com as fontes de dados. Normalmente, trata-se de um banco de dados, mas tambรฉm pode ser um serviรงo que fornece os dados solicitados. ร prรกtica comum manter a lรณgica de negรณcios nos modelos, em vez do controlador. Essa prรกtica รฉ geralmente chamada de "modelo robusto, controlador enxuto".
O modelo geralmente grava dados no banco de dados e fornece um mecanismo para editar, atualizar e excluir dados. Em uma aplicaรงรฃo web moderna, os modelos utilizam padrรตes de projeto de acesso a dados, como o Active Record, para facilitar a interaรงรฃo com o banco de dados.
Por exemplo, nos CodeO Igniter utiliza uma biblioteca Active Record integrada para auxiliar nos modelos, enquanto outros frameworks como o Laravel usam o Eloquent Object Relational Mapper (ORM) para acesso aos dados.
Responsรกvel pelo Tratamento
O controlador fica ร escuta de solicitaรงรตes de recursos vindas dos usuรกrios. Ele atua como intermediรกrio entre o modelo e a visรฃo, e ร s vezes tambรฉm implementa algumas regras de negรณcio. Suponha que o controlador receba uma solicitaรงรฃo para cadastrar um usuรกrio no banco de dados.
O controlador pode realizar a validaรงรฃo dos dados enviados para garantir que todos os parรขmetros necessรกrios estejam presentes. Caso algum parรขmetro esteja faltando, o usuรกrio รฉ redirecionado para a pรกgina de cadastro com a mensagem de erro apropriada. O controlador tambรฉm pode solicitar ao modelo que realize validaรงรตes adicionais, como verificar se o endereรงo de e-mail enviado jรก existe. Se todas as regras de validaรงรฃo forem aprovadas, o controlador envia os dados ao modelo para processamento e aguarda a resposta.
Depois que o modelo tiver processado as informaรงรตes e retornado uma resposta positiva, o controlador carrega a visualizaรงรฃo apropriada e passa os dados retornados do modelo como parรขmetro.
Consultar
A visualizaรงรฃo trata dos dados apresentados ao usuรกrio final. Em aplicaรงรตes web, as visualizaรงรตes geralmente contรชm HTML, CSS e, opcionalmente, JavaScriptAs views contรชm um cรณdigo de programaรงรฃo mรญnimo, geralmente apenas o suficiente para percorrer coleรงรตes de dados recebidos do modelo, ou uma funรงรฃo auxiliar para limpar dados ou criar links de ediรงรฃo. A maioria das aplicaรงรตes web modernas utiliza mecanismos de templates com sua prรณpria sintaxe semelhante a pseudocรณdigo, que os designers conseguem entender. Ao trabalhar com CodeNo Igniter, รฉ prรกtica comum usar tags PHP curtas e estruturas de controle. Para exibir algo em CodeIgniter, vocรช pode usar o seguinte cรณdigo:
<?=$title?>
Em oposiรงรฃo a:
<?php
echo $title;
?>
As estruturas de controle geralmente sรฃo escritas da seguinte forma:
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?></p> </li> <?php endforeach; ?>
Como vocรช pode ver no exemplo acima, a visualizaรงรฃo usa uma combinaรงรฃo de PHP e HTML em vez de incluir tudo em cรณdigo PHP puro.
Como funcionam os frameworks MVC
A imagem a seguir mostra como funciona o framework MVC.
Um controlador recebe a solicitaรงรฃo do usuรกrio, interage com o modelo de banco de dados, se necessรกrio, e entรฃo retorna o resultado para o navegador na forma de cรณdigo HTML, que o navegador interpreta em um formato legรญvel para humanos e exibe para o usuรกrio.
CodeControlador de igniรงรฃo
Vamos agora analisar o que aconteceu quando carregamos o URL No navegador, abra o arquivo Welcome.php do controlador localizado em application/controllers. Vocรช deverรก ver o seguinte cรณdigo:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('welcome_message'); } }
Aqui:
- `defined('BASEPATH') OR exit('No direct script access allowed');` impede o acesso direto ao controlador se a requisiรงรฃo nรฃo passou por `index.php`. Isso รฉ por motivos de seguranรงa.
- A classe `Welcome` estende `CI_Controller` {โฆ} e define a classe do controlador `Welcome`, que por sua vez estende a classe pai `CI_Controller`.
- A funรงรฃo pรบblica index(){โฆ} define o mรฉtodo index que responde ao URL
http://localhost:3000. - `$this->load->view('welcome_message');` carrega a view `welcome_message` localizada no diretรณrio `application/views`.
Agora vamos atualizar o mรฉtodo de indexaรงรฃo da seguinte forma:
public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}
Aqui:
- $this->carregar->model('customers_model'); carrega o modelo de clientes.
- $data['customer'] = $this->customers_model->get_customer(3); chama o mรฉtodo get_customer de customers_model e passa o parรขmetro 3. Neste exemplo, definimos o valor diretamente no cรณdigo, mas em aplicaรงรตes reais esse seria um parรขmetro da URI.
- `$this->load->view('welcome_message',$data);` carrega a view `welcome_message` e passa a variรกvel `$data` como argumento.
CodeModelo de igniรงรฃo
Vamos agora criar o modelo referenciado no cรณdigo acima. Para simplificar, nosso modelo nรฃo interagirรก com o banco de dados mas retornarรก um registro de cliente estรกtico. Trabalharemos com bancos de dados nos prรณximos tutoriais. Crie um arquivo Customers_model.php em application/models e adicione o seguinte cรณdigo:
<?php class Customers_model extends CI_Model { public function get_customer($id) { $data['id'] = 3; $data['first_name'] = 'John'; $data['last_name'] = 'Doe'; $data['address'] = 'Kingstone'; return $data; } }
Aqui:
- class Customers_model estende CI_Model {โฆ} define o modelo Customers_model que estende CI_Model.
- public function get_customer($id) {โฆ} define o mรฉtodo get_customer com base em um id de cliente.
- $data[โฆ] define os valores estรกticos do nosso cliente fictรญcio. Isso deve ser uma linha retornada do banco de dados.
- retornar $dados; retorna os dados do cliente.
Isso conclui nosso modelo. Agora, vamos modificar a view welcome_message. Abra o arquivo welcome_message.php localizado em:
application/views/welcome_message.php
Substitua o cรณdigo pelo seguinte:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter MVC Basics</title> </head> <body> <h1>Customer Details Card</h1> <p>Customer ID : <strong><?=$customer['id']?></strong></p> <p>First Name : <strong><?=$customer['first_name']?></strong></p> <p>Last Name : <strong><?=$customer['last_name']?></strong></p> <p>Address : <strong><?=$customer['address']?></strong></p> </body> </html>
Salve as alteraรงรตes e carregue o seguinte URL no navegador web: http://localhost:3000/Vocรช deverรก ver o cartรฃo do cliente conforme mostrado na imagem abaixo.


