Estrutura CodeIgniter MVC (Model View Controller) com exemplo
O que é MVC?
Padrões MVC para Model-View-Control. É um padrão arquitetônico que divide o aplicativo em três componentes principais.
1. O modelo lida com lógica de negócios e interações de banco de dados
2. O controlador coordena as atividades entre o modelo e a visualização
3. View é responsável pela apresentação dos dados
A seguir estão algumas das vantagens do padrão arquitetônico MVC
- Acoplamento frouxo – os componentes existem e funcionam independentemente uns dos outros.
- Flexibilidade – pode-se facilmente fazer alterações em componentes individuais
- Aumento da produtividade – mais de uma pessoa pode trabalhar no projeto ao mesmo tempo. Os desenvolvedores front-end podem trabalhar nas visualizações e na apresentação, enquanto os desenvolvedores back-end podem se concentrar nos modelos e, como o sistema é fracamente acoplado, ele funciona no final do dia
Modelo
O modelo é responsável por interagir com as fontes de dados. Geralmente é um banco de dados, mas também pode ser um serviço que fornece os dados solicitados. Também é uma prática comum ter a lógica de negócios contida nos modelos, em oposição ao controlador. Essa prática é geralmente chamada de controlador magro de modelo gordo.
O modelo geralmente grava dados no banco de dados, fornece um mecanismo para edição, atualização e exclusão de dados. Em uma aplicação web moderna, os modelos usam padrões de design de acesso a dados, como registro ativo, para facilitar a interação com o banco de dados.
Por exemplo, CodeIgniter usa uma biblioteca integrada Active Record para auxiliar os modelos, enquanto outras estruturas como Laravel usam Eloquent Object Relational Mapper (ORM) que auxilia no acesso aos dados.
Responsável pelo Tratamento
O controlador escuta as solicitações recebidas de recursos 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ócios. Digamos que o controlador receba uma solicitação para registrar um usuário no banco de dados.
O responsável pelo tratamento pode realizar a validação dos dados sobre o que foi submetido para garantir que todos os parâmetros exigidos foram submetidos. Se algo estiver faltando, o usuário será redirecionado para a página de registro com a mensagem de erro apropriada exibida. O controlador também pode solicitar ao modelo que realize mais validações, verificando 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.
Ver
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, JavaScript. As visualizações contêm código de programação mínimo. O código contido nas visualizações geralmente é usado para percorrer coleções de dados recebidos como parâmetros do modelo ou função auxiliar para limpeza de dados ou criação de links para edição dos registros. A maioria dos aplicativos da web modernos geralmente usa mecanismos de modelagem que definem sua própria sintaxe, que é mais parecida com pseudocódigo e pode ser facilmente entendida pelos designers. Ao trabalhar com CodeIgniter, é prática comum usar tags PHP curtas e estruturas de controle. Para exibir algo no CodeIgniter, pode-se usar o seguinte código
<?=$title?>
Ao contrário de
<?php echo $title; ?>
As estruturas de controle são geralmente 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 usará uma combinação de PHP e HTML em vez de incluir tudo em código PHP puro.
Como funcionam as estruturas MVC?
A imagem a seguir mostra o funcionamento do 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 ao navegador na forma de código HTML que o navegador interpreta em um formato legível e exibido ao usuário.
Controlador CodeIgniter
Vamos agora detalhar o que aconteceu quando carregamos o URL acima no navegador da web.
Abra o arquivo Welcome.php controller localizado em application/controllers
Você deve conseguir 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,
- definido('BASEPATH') OR exit('Não é permitido acesso direto ao script'); impede o acesso direto ao controlador se a solicitação não vier através do index.php. isso é para fins de segurança.
- class Welcome estende CI_Controller {…} define a classe do controlador Welcome e estende a classe pai CI_Controller
- função pública index(){…} define o método de índice que responde ao URL
http://localhost:3000
- $this->carregar->view('welcome_message'); carrega a view welcome_message que está localizada no diretório application/views
Agora atualizaremos o método de índice da seguinte maneira
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 clients_model e passa o parâmetro 3. Neste exemplo, codificamos o valor, mas em aplicativos da vida real este seria um parâmetro do URI.
- $this->carregar->view('welcome_message',$data); carrega a view welcome_message e passa a variável $data para a view
Modelo CodeIgniter
Vamos agora criar a visualização que referenciamos no código acima. Para simplificar, nosso modelo não irá interagir com o banco de dados mas retornará um registro estático do cliente. Trabalharemos com bancos de dados nos próximos tutoriais.
Crie um arquivo Customers_model.php em application/models
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.
- função pública 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. Esta deve ser uma linha retornada do banco de dados.
- retornar $dados; retorna os dados do cliente.
Ou seja, para o nosso modelo. Vamos agora modificar a visualização welcome_message
Abra 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
Carregue o seguinte URL no navegador da web
http://localhost:3000/
Você deverá conseguir ver o cartão do cliente conforme mostrado na imagem abaixo
Resumo
- MVC é um padrão de arquitetura que divide o aplicativo em três componentes principais
- O modelo é responsável por interagir com fontes de dados
- O controlador escuta solicitações recebidas de recursos dos usuários
- Em aplicações web, as visualizações geralmente contêm HTML, CSS e, opcionalmente, JavaScript
- 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 ao navegador na forma de código HTML