Você está na página 1de 8

IMPLEMENTANDO A ARQUITETURA MVC COM PHP 5.

julho 8, 2009 thiago Luiz Rodrigues 4 comentrios Nesse artigo sobre o uso da arquitetura MVC com PHP 5 quero ser o mais simples possvel evitando o exagero de termos tcnicos para mostrar como implementar a arquitetura na linguagem PHP. Para entender a arquitetura MVC e compreender esse tutorial leia o artigo: Entendendo a arquitetura MVC no link abaixo. http://bobboy.wordpress.com/2009/07/03/entendendo-a-arquitetura-mvc/ A primeira coisa a se fazer projetar o software. Conheo vrios desenvolvedores, que odeiam projetos de software, ehehee. No software iremos cadastrar clientes e mostrar os clientes cadastrados. Para isso criaremos o mdulo cliente que tem os seguintes atributos: +ID //identificao do usurio +NOME //Nome do usurio E os seguintes mtodos #setNome(nome) // seta um nome para o cliente #setID(id) // seta uma identificao para o cliente +all() // Retorna todos os clientes cadastrados +intoCliente(cliente) // cadastra um novo cliente Diagrama de Classe da aplicao.

Como iremos trabalhar com MVC, vamos criar uma pasta para o View, Controll, e Model

Siga a imagem abaixo:

Definimos as regras de negcios do Cliente fizemos o projeto agora vamos codificar nossa Class Cliente. Essa class ser nosso modelo computacional, dentro da pasta model crie o arquivo class.cliente.php Codificao 1 <?php 2 3 //inclue o arquivo que faz a conexo com o banco de dados 4 require(../opemDB.php); 5 6 class Cliente { 7 8 public $nome; 9 public $id; 10 11 protected function setCliente($nome) 12 { 13 14 $this->nome = $nome; 15 16 } 17 18 protected function setId($id) 19 { 20 21 $this->id = $id; 22 23 } 24 25 //mtodo que retorna todos os clientes cadastrados 26 public function all() 27 28 { 29 30 $sql = SELECT * FROM `cliente` WHERE 1; 31

32 //executa o SQL 33 $result = mysql_query($sql); 34 35 // o lao percorre todas a posies de um array contendo os dados dos clientes 36 //como nome e id 37 38 while($dados = mysql_fetch_array($result)) 39 { 40 41 $cliente = new Cliente(); //<< instancia um objeto cliente para cada cliente que existe 42 43 //objeto cliente chama o mtodo setID e passa os dados como um array de posio id 44 $cliente->setId(array(id => $dados['id'])); 45 46 //objeto cliente chama o mtodo setNome e passa os dados como um array de posio nome 47 $cliente->setCliente(array(nome => $dados['nome'])); 48 49 //variavel $arr do tipo array para cada nova posio recebe o objeto cliente 50 $arr[] = $cliente; 51 52 } 53 54 //retorna o array com todos os objetos instanciados obs: cada registro um objeto 55 return $arr; 56 57 } 58 59 //mtodo que faz o cadastro de um novo cliente 60 public function intoCliente($cliente) 61 { 62 63 $sql = INSERT INTO `cliente` ( `id` , `nome` ) VALUES (NULL , $cliente);; 64 mysql_query($sql); 65 66 } 67 68 } 69 70 ?> Dentro da pasta MVC que fica acima da pasta Model crie o arquivo opemDB.php, arquivo responsvel por toda conexo com o banco de dados. Nesse exemplos estamos usando o MySQL como nosso SGDB. Ento crie um banco de dados com as seguintes caractersticas abaixo segue um pseudo SQL: id int (not nul) autoInc. nome varchar (not null) 80 caracteres.

Codificao. 1 <?php 2 3 $local = 127.0.0.1; 4 5 $login = root; 6 7 $senha = ; 8 9 $banco = mvc; 10 11 mysql_pconnect($local, $login, $senha); 12 13 mysql_select_db($banco); 14 15 ?> Dentro da pasta control vamos criar o arquivo, class.control.cliente.php. Arquivo responsvel por todo controle de nossa aplicao. Codificao. 1 <?php 2 3 //inclue a Class cliente. 4 5 require(../model/class.cliente.php); 6 7 class Control { 8 9 public $control; 10 11 //mtodo que faz o controle do mtodo all() da class cliente 12 13 public function Controle() 14 15 { 16 17 //intancia um o objeto da class cliente 18 19 $this->control = new Cliente(); 20 21 //retorna o mtodo all() com os registros em formatos de objetos 22 23 //como vimos na class cliente. 24 25 return $this->control->all(); 26 27 }

28 29 //mtodo que faz o controle do mtodo intoCliente() da class cliente 30 31 public function cadCliente($nome) 32 33 { 34 35 //recebe um valor na variavel nome se nome vazil retorna uma mensagen de erro 36 37 if($nome == ) { 38 39 print Digite seu nome; 40 41 } else { 42 43 //se o nome no for vazil instancia um objeto da class cliente 44 45 $this->control = new Cliente(); 46 47 //chama o mtodo intoCliente enviando o nome(); 48 49 $this->control->intoCliente($nome); 50 51 } 52 53 } 54 55 } 56 57 ?> Dentro da pasta view vamos criar o arquivo, index.php. Arquivo o modelo humano de representao do modelo computacional. Codificao. 1 <?php 2 3 //inclue a class Control no view 4 5 require(../control/class.control.cliente.php); 6 7 $nome = $_POST["nome"]; 8 9 //instancia um objeto da class control 10 11 $cad = new Control(); 12 13 //chama o mtodo para cadastrar um novo cliente enviando seu nome 14

15 $cad->cadCliente($nome); 16 17 ?> 18 19 <table cellpadding=3 cellspacing=3> 20 21 <form method=post action=index.php> 22 23 <tr> 24 25 <td width=67 bgcolor=#99CC00>NOME</td> 26 27 <td width=168 bgcolor=#99FF00><input type=text /></td> 28 29 </tr> 30 31 <tr> 32 33 <td width=67 bgcolor=#FFFFFF>&nbsp;</td> 34 35 <td width=168 bgcolor=#FFFFFF><input name=enviar value=enviar /></td> 36 37 </tr> 38 39 </form> 40 41 </table> 42 43 <table cellpadding=3 cellspacing=3> 44 45 <tr> 46 47 <td width=21 bgcolor=#99CC00>ID</td> 48 49 <td width=214 bgcolor=#99FF00>NOME</td> 50 51 </tr> 52 53 <?php 54 55 //instancia um novo objeto da class Control 56 57 $c = new Control(); 58 59 //chama o mtodo controle que retorna todos os registro dos clientes 60 61 $arr = $c->Controle(); 62 63 //um lao que percorre todos os registro

64 65 // count($arr) retorna a quantidade de registros 66 67 for ($i = 0; $i < count($arr); $i++) 68 69 { 70 71 ?> 72 73 <tr> 74 75 <td> 76 77 <?php 78 79 //imprime o id do cliente dentro da selula da tabela 80 81 print $arr[$i]->id['id']; 82 83 ?> 84 85 </td> 86 87 <td> 88 89 <?php 90 91 //imprime o nome do cliente dentro da selula da tabela 92 93 print $arr[$i]->nome['nome']; 94 95 ?> 96 97 </td> 98 99 </tr> 100 101 <?php 102 103 } 104 105 ?> 106 107 </table> Abra seu navegador de internet e digite: http://127.0.0.1/mvc/view/index.php e ver a seguinte imagen:

Agora voc criou sua primeira aplicao usando MVC para web com PHP 5. para finalizar vou fazer alguns comentrios Na class control aonde feito todo o controle de nossa aplicao um exemplo prtico o mtodo cadCliente($nome), faz todo controle como verifificao se tudo estiver ok ele cria uma instancia do Model que no nosso caso a class Cliente e faz o cadastro de um novo cliente. O objetivo central da arquitetura MVC como podemos observar separar a visualizao do modelo atravs do controle. Isso se resume em produtividade e facilidade na manuteno e portabilidade do cdigo pos se um dia voc quiser que o nome maria no seja includo voc faz essa verificao somente no controle sem alterar a visualizao e nem o modelo computacional. Vamos entender o $arr[$i]->nome['nome']; $arr[$i] contem um objeto que o objeto Cliente e atravs dele chama o atributo nome que um array que tem uma posio nome. Espero ter ajudado!!!.. Qual quer informao, elogio, reclamao s dar sua opinio

Abraos..