Tutorial do framework PHP MVC

โšก Resumo Inteligente

O framework PHP MVC (Model-View-Controller) separa os dados da aplicaรงรฃo e a lรณgica de negรณcios da apresentaรงรฃo, utilizando Models (Modelos), Views (Visรตes) e Controllers (Controladores). CodeO Igniter torna esse padrรฃo prรกtico, permitindo que os desenvolvedores PHP criem aplicativos web seguros e de fรกcil manutenรงรฃo mais rapidamente.

  • ๐Ÿงฉ Padrรฃo: O padrรฃo MVC divide uma aplicaรงรฃo em Modelo (dados), Visรฃo (apresentaรงรฃo) e Controlador (tratamento de requisiรงรตes), resultando em um cรณdigo mais limpo.
  • ๐Ÿš€ Produtividade: Os frameworks incluem bibliotecas prรฉ-construรญdas para acesso a bancos de dados, validaรงรฃo e higienizaรงรฃo de entrada, permitindo que as equipes entreguem funcionalidades mais rapidamente.
  • ๐Ÿ› ๏ธ opรงรตes: CodeIgniter, CakePHP e Laminas (anteriormente Zend) continuam sendo opรงรตes ativas, enquanto Kohana foi descontinuado em 2017.
  • ๐Ÿ—„๏ธ Modelo: In CodeIgniter, os modelos estendem CI_Model e usam mรฉtodos do Query Builder para operaรงรตes seguras no banco de dados.
  • ๐ŸŽฎ Controlador: Os controladores estendem a classe CI_Controller, leem a entrada do usuรกrio por meio da classe de entrada e carregam a visualizaรงรฃo correta.
  • ๐Ÿ“ˆ Impacto: A migraรงรฃo de uma aplicaรงรฃo PHP simples para uma plataforma de votaรงรฃo demonstra como a estrutura MVC elimina a duplicaรงรฃo de cรณdigo e simplifica a manutenรงรฃo a longo prazo.

Framework PHP MVC

O que รฉ estrutura PHP MVC?

PHP MVC รฉ um padrรฃo de design de aplicativo que separa os dados do aplicativo e a lรณgica de negรณcios (modelo) da apresentaรงรฃo (visualizaรงรฃo). MVC significa Modelo, Visualizaรงรฃo e Controlador.

O controlador faz a mediaรงรฃo entre os modelos e as visualizaรงรตes.

Pense no padrรฃo de design MVC como um carro e o motorista.

O carro possui para-brisas (visรฃo) que o motorista (controlador) utiliza para monitorar o trรกfego ร  frente e, em seguida, acelerar ou frear (modelo) dependendo do que vรช ร  frente.

Em seguida, vejamos por que vale a pena usar uma estrutura construรญda com base nesse padrรฃo.

Por que usar PHP MVC Framework?

Os frameworks PHP MVC simplificam o trabalho com tecnologias complexas ao:

  • Escondendo todos os detalhes complexos de implementaรงรฃo
  • Fornecer mรฉtodos padrรฃo que podemos usar para construir nossos aplicativos.
  • Aumento da produtividade do desenvolvedor, pois implementaรงรตes bรกsicas de atividades como conexรฃo com o banco de dados e higienizaรงรฃo da entrada do usuรกrio jรก estรฃo parcialmente implementadas.
  • Incentivar a adesรฃo aos padrรตes de codificaรงรฃo profissional.

Padrรฃo de design PHP MVC

Vamos agora discutir brevemente cada componente do padrรฃo de design MVC.

Modelo โ€“ esta parte trata da lรณgica de negรณcios e dos dados da aplicaรงรฃo. Ele pode ser usado para realizar validaรงรตes de dados, processar dados e armazenรก-los. Os dados podem vir de;

  • arquivo plano
  • banco de dados
  • documento XML
  • Outras fontes de dados vรกlidas.

Responsรกvel pelo Tratamento โ€“ Esta รฉ a parte que lida com as solicitaรงรตes de recursos do usuรกrio ao servidor.

Por exemplo, quando o usuรกrio solicita o URL โ€ฆ/index.php?products=listO controlador carregarรก o modelo de produtos para recuperar os dados dos produtos e, em seguida, exibirรก os resultados na lista.

Resumindo, o controlador vincula os modelos e visualizaรงรตes dependendo dos recursos solicitados.

Visualizaรงรตes โ€“ Esta parte trata da apresentaรงรฃo dos dados ao usuรกrio. Normalmente, isso รฉ feito por meio de pรกginas HTML.

Tipos de estrutura PHP MVC

Selecionar o melhor framework PHP รฉ um desafio.

Vocรช nรฃo precisa escrever sua prรณpria estrutura para se beneficiar das vantagens do MVC.

Vocรช sรณ deve tentar criar seu prรณprio design de aplicativo relacionado ao MVC para entender como as estruturas MVC funcionam.

Quando estiver confortรกvel com a forma como os frameworks MVC funcionam, vocรช deverรก passar para os frameworks maduros e jรก testados.

A tabela abaixo descreve brevemente alguns dos frameworks PHP mais populares e os recursos que cada um oferece.

Quadro Descriรงรฃo

CodeIgnorar


CodeIgnorar


https://codeigniter.com/

ร‰ um dos frameworks PHP MVC mais populares, atualmente em sua quarta versรฃo principal (CodeIgniter 4). ร‰ leve e tem uma curva de aprendizado curta. Possui um conjunto robusto de bibliotecas que ajudam a construir sites e aplicativos rapidamente. Usuรกrios com conhecimento limitado de programaรงรฃo orientada a objetos tambรฉm podem utilizรก-lo. Aplicativos construรญdos com CodeIgniter inclui;


Cohana


Cohana


http://kohanaframework.org

ร‰ um framework HMVC (Hierarchical Model View Controller) seguro e leve. Observaรงรฃo: O Kohana foi oficialmente descontinuado em 2017; sua รบltima versรฃo estรกvel foi a 3.3.6 (julho de 2016). O fork comunitรกrio Koseven continuou seu cรณdigo-fonte. Empresas que utilizaram o Kohana incluem:


CakePHP


CakePHP


www.cakephp.org

ร‰ baseado no Ruby on Rails e permanece em manutenรงรฃo ativa (versรฃo 5.x). ร‰ conhecido por conceitos como padrรตes de projeto de software, convenรงรฃo sobre configuraรงรฃo, ActiveRecord etc. CakePHP aplicaรงรตes alimentadas incluem;


Zend

https://getlaminas.org/


Zend (agora Laminas)

ร‰ uma estrutura poderosa;

  • Seguro, confiรกvel, rรกpido e escalรกvel
  • Suporta a criaรงรฃo de serviรงos web e APIs.

ร‰ ideal para desenvolvedores.ping Aplicaรงรตes empresariais. Em 2020, o Zend Framework fez a transiรงรฃo para o projeto de cรณdigo aberto Laminas. As aplicaรงรตes baseadas em Zend/Laminas incluem:

  • PimcoreCMS,
  • DotKernel.

Empresas que utilizaram o framework Zend incluem:

  • BBC
  • Cisco
  • Webex
  • Ofertas.com

Framework PHP MVC vs PHP puro: principais diferenรงas

Na prรกtica, o que um framework realmente muda? O PHP puro oferece total liberdade, mas todo projeto acaba reinventando o roteamento, a validaรงรฃo e o acesso ao banco de dados do zero. Um framework PHP MVC padroniza essas tarefas repetitivas, mantendo a consistรชncia do cรณdigo entre projetos e equipes.

Aspecto PHP puro Framework PHP MVC
Code organizaรงรฃo HTML, SQL e lรณgica combinados em arquivos รบnicos Separado em modelos, visualizaรงรตes e controladores.
Acesso ao banco de dados Consultas escritas ร  mรฃo em todas as pรกginas. Construtor de consultas integrado ou ORM com vinculaรงรฃo de parรขmetros
Total O desenvolvedor deve se lembrar de todas as medidas de seguranรงa. Filtragem de entrada, proteรงรฃo contra XSS e CSRF incluรญdas.
Manutenรงรฃo As alteraรงรตes se propagam de forma imprevisรญvel pelos arquivos. Cada camada pode ser alterada independentemente.

๐Ÿ’ก Dica: Comece criando um pequeno projeto PHP simples, como o da enquete abaixo; a dificuldade de lidar com cรณdigo misto torna รณbvio o valor da separaรงรฃo do MVC.

Adaptar o aplicativo de pesquisa de opiniรฃo para CodeIgnorar

Neste curso tutorialCriamos um aplicativo de pesquisa em PHP. Aqui, vamos portar esse cรณdigo para... CodeIgnorar

  • Baixar a รบltima versรฃo de CodeIgnitor deles .
  • ExtracExtraia o conteรบdo do arquivo compactado para o diretรณrio de desenvolvimento do seu servidor web. Usaremos "ciopinionpoll" como nome da pasta nesta liรงรฃo.
  • Navegue atรฉ o URL http://localhost/ciopinionpoll/

CodePรกgina de boas-vindas do Igniter exibida apรณs extractingindo a estrutura

O CodeA pรกgina de boas-vindas do Igniter acima confirma que o framework foi instalado corretamente. Agora vamos migrar nosso aplicativo de pesquisa de opiniรฃo para... CodeIgniter. Lembre-se de que nossa aplicaรงรฃo foi dividida em trรชs componentes principais, a saber:

  • Controlador frontal โ€“ esta รฉ a parte que responde a URL O controlador faz a requisiรงรฃo e retorna a pรกgina solicitada.
  • Modelo โ€“ este รฉ o cรณdigo que responde ร s solicitaรงรตes de dados e retorna os dados solicitados. Este cรณdigo serรก inserido no modelo.
  • Visualizaรงรตes โ€“ este รฉ o cรณdigo responsรกvel por formatar e exibir os dados. Este cรณdigo irรก para a visualizaรงรฃo

Definiรงรตes de configuraรงรฃo do banco de dados

Para configurar a conexรฃo com o banco de dados:

  • Acesse a pasta ciopinionpoll
  • Abra o banco de dados.php Arquivo localizado no diretรณrio application/config.
  • Localize as seguintes linhas de cรณdigo

Configuraรงรตes de banco de dados em CodeArquivo database.php do Igniter

  • Defina o nome de usuรกrio como root
  • Defina a senha para a senha de root do seu localhost.
  • Defina o nome do banco de dados como opinion_poll. Observe que usaremos o banco de dados criado na liรงรฃo anterior.
  • Salve as alteraรงรตes e feche o arquivo.

Criando Nosso Modelo

Em seguida, vamos criar nosso modelo que estenderรก o CI_Model. O CI_Model faz parte do CodeBibliotecas Igniter. O modelo estarรก localizado em application/models. opiniรฃo_poll_model.php

<?php
class Opinion_poll_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
        $this->load->database();
    }

    public function total_votes()
    {
        $query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
        return $query->row()->choices_count;
    }

    public function get_results()
    {
        $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
        $table_rows = '';

        for ($i = 1; $i < 5; $i++)
        {
            $query = $this->db->select('COUNT(choice) as choices_count')
                              ->where('choice', $i)
                              ->get('js_libraries');

            $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
        }

        return $table_rows;
    }

    public function add_vote($choice)
    {
        $ts = date("Y-m-d H:i:s");
        $data = array('choice' => $choice, 'ts' => $ts);
        $this->db->insert('js_libraries', $data);
    }
}
?>

AQUI,

  • โ€œclass Opinion_poll_model estende CI_Modelโ€ฆโ€ รฉ o nosso modelo que estende o CI_Model
  • โ€œparent::__construct();โ€ chama o construtor CI_Model
  • โ€œ$this->carregar->banco de dados();โ€ carrega a biblioteca do banco de dados para que nosso aplicativo possa interagir com o banco de dados
  • โ€œ$this->db->โ€ รฉ CodeHistรณrico ativo do Igniter. Confira isto. link para obter mais informaรงรตes sobre o registro ativo.

Criando nosso controlador

Vamos agora criar o controlador. Usaremos o padrรฃo. CodeO controlador Igniter estรก localizado em application/controllers/welcome.php. Substitua seu cรณdigo-fonte pelo seguinte cรณdigo.

<?php

if (!defined('BASEPATH'))  exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->model('opinion_poll_model');

    }

    public function index() {

        if ($this->input->post('submitbutton') && !$this->input->post('vote')) {

            echo "<script>alert('You did not vote!');</script>";

        }

        if ($this->input->post('vote')) {

            $this->opinion_poll_model->add_vote($this->input->post('vote'));

            $data['total_votes'] = $this->opinion_poll_model->total_votes();

            $data['rows'] = $this->opinion_poll_model->get_results();

            $this->load->view('results', $data);

        } else {

            $this->load->view('opinion_poll_form');

        }

    }

}

/* End of file welcome.php */

/* Location: ./application/controllers/welcome.php */
?>

AQUI,

  • โ€œif (!definido('BASEPATH')) exit('Nรฃo รฉ permitido acesso direto ao script');โ€ garante que os usuรกrios nรฃo acessem diretamente a classe do controlador
  • โ€œclass Welcome estende CI_Controllerโ€ฆโ€ nosso controlador estende a classe CI_Controller
  • A funรงรฃo pรบblica โ€œ__construct()โ€ chama o mรฉtodo construtor da classe CI_Controller e carrega nosso modelo Opinion_poll_model.
  • โ€œpublic function index()โ€ฆโ€ รฉ a funรงรฃo que mapeia para index.php. Ela usa CodeA classe de entrada do Igniter verifica se um voto foi submetido, adiciona-o ao banco de dados e, em seguida, exibe os resultados. Se o array `post` da classe de entrada estiver vazio, a pรกgina de votaรงรฃo รฉ carregada.
  • โ€œ$this->input->post('โ€ฆ')โ€ รฉ o CodeClasse de entrada do Igniter que obtรฉm o conteรบdo da variรกvel global $_POST.
  • โ€œ$this->opinion_poll_model->add_vote($this->input->post('vote'))โ€ chama o mรฉtodo add_vote do modelo para adicionar o voto ao banco de dados.

Criando nossas visualizaรงรตes

Relembrando o exemplo anterior, tรญnhamos duas pรกginas HTML, uma para votaรงรฃo e outra para resultados. Usaremos o mesmo cรณdigo HTML com modificaรงรตes mรญnimas para criar nossas visualizaรงรตes. Crie os seguintes arquivos no diretรณrio application/views.

opinion_poll_form.php
<html>
<head>
    <title>
        JavaScript Libraries - Opinion Poll
    </title>
</head>

<body>
    <h2>JavaScript Libraries - Opinion Poll</h2>
    <p><b>What is your favorite JavaScript Library?</b></p>
    <form method="POST" action="index.php">
        <p>
            <input type="radio" name="vote" value="1" /> JQuery
            <br />
            <input type="radio" name="vote" value="2" /> MooTools
            <br />
            <input type="radio" name="vote" value="3" /> YUI Library
            <br />
            <input type="radio" name="vote" value="4" /> Glow </p>
        <p>
            <input type="submit" name="submitbutton" value="OK" />
        </p>
    </form>
</body>
</html>

Vamos agora criar a pรกgina de resultados results.php

<html>
    <head>
        <title>JavaScript Libraries - Opinion Poll Results</title>
    </head>
    <body>

        <h2>JavaScript Libraries - Opinion Poll Results</h2>

        <p><b>What is your favorite JavaScript Library?</b></p>

        <p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>

        <p><table><tr><td>

            <?php print($rows); ?>

        </tr></td></table></p>

        <p><a href="#">Return to voting page</a></p>
</body>
</html>

Testando nosso aplicativo

Supondo que o diretรณrio raiz do seu aplicativo seja ciopinionpoll, navegue atรฉ http://localhost/ciopinionpoll/

Formulรกrio de votaรงรฃo da pesquisa de opiniรฃo elaborado pelo CodeAplicativo Igniter

A pรกgina de votaรงรฃo acima vem da nossa visualizaรงรฃo opinion_poll_form. Clique em OK sem selecionar uma opรงรฃo e vocรช verรก a seguinte mensagem de alerta.

Mensagem de alerta de validaรงรฃo exibida quando nenhum voto รฉ selecionado.

Vote na sua biblioteca favorita e clique em OK. Vocรช verรก a seguinte pรกgina de resultados.

Pรกgina de resultados de pesquisas de opiniรฃo mostrando a contagem de votos por JavaBiblioteca de scripts

Isso confirma que as trรชs camadas funcionam em conjunto: o controlador recebeu o voto, o modelo o armazenou e contabilizou, e a visualizaรงรฃo exibiu os totais.

Perguntas Frequentes

O HMVC (Hierarchical Model View Controller) organiza uma aplicaรงรฃo em trรญades MVC independentes que podem se chamar mutuamente. Frameworks como Cohana O HMVC se popularizou porque ajuda a modularizar grandes aplicaรงรตes.

Sim. Travas deslizantes portรกteis Laravel Atualmente, รฉ o framework PHP MVC mais popular. Ele segue a mesma separaรงรฃo Modelo-Visรฃo-Controlador descrita aqui, adicionando ferramentas como o Eloquent ORM e os templates Blade.

Sim. Ferramentas como Copiloto do GitHub ร‰ possรญvel gerar modelos, controladores e visualizaรงรตes a partir de instruรงรตes. Mesmo assim, vocรช deve revisar o cรณdigo gerado em busca de problemas de seguranรงa, como saรญda nรฃo tratada e injeรงรฃo de SQL.

Nรฃo. Os assistentes de IA aceleram a escrita de cรณdigo, mas os frameworks ainda fornecem a estrutura testada, as configuraรงรตes de seguranรงa padrรฃo e as convenรงรตes que mantรชm os aplicativos fรกceis de manter. Os dois funcionam melhor juntos.

Nรฃo. CodeIgnorar ร‰ amigรกvel para desenvolvedores com pouca experiรชncia em programaรงรฃo orientada a objetos. Conhecer classes, mรฉtodos e heranรงa bรกsica รฉ suficiente para seguir seus padrรตes de modelo e controlador.

Resuma esta postagem com: