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.

  • ???? Padrรฃo central: O MVC divide uma aplicaรงรฃo em componentes de modelo, visรฃo e controlador.
  • ๐Ÿ’พ Modelo: Interage com a fonte de dados e contรฉm a lรณgica de negรณcios, geralmente por meio do Active Record.
  • ๐ŸŽ›๏ธ Controlador: Escuta solicitaรงรตes, valida entradas e coordena o modelo e a visualizaรงรฃo.
  • ๐Ÿ–ผ๏ธ Vista: Apresenta os dados em HTML, CSS e PHP mรญnimo, mantendo-os livres de lรณgica complexa.
  • ๐Ÿ”— Acoplamento solto: Os componentes funcionam de forma independente, permitindo que o trabalho de front-end e back-end seja executado em paralelo.
  • โšก Etiquetas curtas: CodeAs views do Igniter geralmente usam tags PHP echo curtas para templates mais limpos.
  • ๐Ÿ” Fluxo de requisiรงรฃo: Do controlador para o modelo, para a visualizaรงรฃo e, em seguida, para o HTML de volta ao navegador.

CodeFramework Igniter MVC

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:

  1. O modelo lida com a lรณgica de negรณcios e as interaรงรตes com o banco de dados.
  2. O controlador coordena as atividades entre o modelo e a visualizaรงรฃo.
  3. 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.

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.

Cartรฃo com os dados do cliente fornecido por CodeIgnorar

Perguntas Frequentes

Significa que a lรณgica de negรณcios reside no modelo, mantenhaping O controlador รฉ enxuto e focado no roteamento de requisiรงรตes. Isso torna a lรณgica reutilizรกvel e o controlador mais fรกcil de ler e testar.

Uma visualizaรงรฃo deve apresentar apenas dados. Keeping A lรณgica por trรกs disso separa as responsabilidades, permitindo que os designers editem o layout sem alterar as regras de negรณcio, e os mesmos dados podem ser exibidos em diferentes visualizaรงรตes.

O Active Record รฉ um construtor de consultas integrado que permite que os modelos leiam e gravem no banco de dados com chamadas de mรฉtodo em vez de SQL puro. Ele tambรฉm ajuda a prevenir injeรงรฃo de SQL por meio de escaneamento.ping valores.

A IA pode gerar arquivos correspondentes de controlador, modelo e visualizaรงรฃo a partir da descriรงรฃo de um recurso, mantendo a consistรชncia na nomenclatura. RevVisualize as consultas geradas e a validaรงรฃo antes de executรก-las.

A tag curta `echo` รฉ uma forma compacta de imprimir um valor em uma view. O bloco de tag PHP completo รฉ usado para instruรงรตes e estruturas de controle. Ambos sรฃo equivalentes em termos de saรญda, mas as tags curtas mantรชm as views mais organizadas.

Resuma esta postagem com: