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

Estruturas MVC funcionam

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

Modelo CodeIgniter

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