Vous êtes sur la page 1sur 23

MVC PHP- PHP OOP

Ol. Neste post pretendo demonstrar um exemplo simples e prtico de como usar o PHP orientado a objetos no esquema MVC (Model View Controller). Observao : esse esquema passa a funcionar muito bem a partir do PHP 5.3 O resultado final ser uma pgina que lista os clientes cadastrados. (nos prximos posts de PHP posso detalhar as funes CRUD) No pretendo discutir os conceitos de MVC, apenas mostrar sua implementao em PHP, destacando a facilidade de construo e manuteno de cdigo, quando as partes (camadas) da aplicao esto separadas em : M- Modelo de Dados: estrutura dos Objetos (Classes) V-View: Interface de apresentao dos dados p/ o Usurio (Telas ou pginas) C- Controle : Regras de negcios (Componentes e Controllers) Essas camadas devem ser independentes, ou seja : se mudar alguma regra de negcio, esta deve ser implementada na camada de Controle, assim como se a interface for alterada, no existe a a necessidade de se mexer nas regras. Eu costumo utilizar mais uma "camada" em minhas aplicaes conhecida como DAO (Data Access Object) que a camada responsvel pela comunicao com o Banco de Dados. Esta utilizada pela camada de Controle para carregar os Modelos com os dados e entregar para as Views.

Figura 1- Resumo MVC


Exemplo de organizao de cdigo : (Neste exemplo mostrarei com a seo clientes)

Figura 2- Estrutura de pastas e arquivos --App : --Controller : cada Objeto tem o seu , onde ficam as regras de negcio

--DAO : cada Objeto tem o seu --Model : quase todas as entidades do DB possuem o seu Objeto e outras informaes que sejam compartilhadas em vrias sees do site

View : cada Objeto tem sua pasta com as operaes bsicas de qualquer CRUD (Create Read Update Delete) e um ndice (lista inicial) C-> add.php R-> view.php U-> edit.php D-> remove.php --lib : pasta que contm as principais funes compartilhadas do sistema.

pastas com itens de layout do site : --css : estilos css --images : imagens da seo pblica --img : imagens da seo privada --js : arquivos javascript --pages : as pginas do site --static_includes : arquivos que no mudam : meta-tags, cabealho, rodap

Tabelas do Banco de Dados (MYSQL nesse exemplo): Cliente,Estado,Cidade

Figura 3- Diagrama do DB ? 1 -- estado 2 CREATE TABLE IF NOT EXISTS `mydb`.`estado` ( 3 `id` INT(11) NOT NULL AUTO_INCREMENT , 4 `uf` VARCHAR(2) NULL DEFAULT NULL , 5 `nome` VARCHAR(45) NULL DEFAULT NULL , PRIMARY KEY (`id`) ) 6 ENGINE = InnoDB 7 AUTO_INCREMENT = 28 8 DEFAULT CHARACTER SET = utf8 9 COLLATE = utf8_general_ci 10 11-- cidade 12CREATE TABLE IF NOT EXISTS `mydb`.`cidade` ( `id` INT(11) NOT NULL AUTO_INCREMENT , 13 `estado_id` INT(11) NOT NULL , 14 `uf` VARCHAR(2) NULL DEFAULT NULL , 15 `nome` VARCHAR(120) NULL DEFAULT NULL , 16 PRIMARY KEY (`id`) , INDEX `estado_cidade_FK` (`estado_id` ASC) , 17 CONSTRAINT `estado_cidade_FK` 18 FOREIGN KEY (`estado_id` ) 19 REFERENCES `mydb`.`estado` (`id` ) ON DELETE NO ACTION 20 ON UPDATE NO ACTION) 21

22ENGINE = InnoDB 23AUTO_INCREMENT = 9715 DEFAULT CHARACTER SET = utf8 24COLLATE = utf8_general_ci 25 26 27-- cliente 28 29CREATE TABLE IF NOT EXISTS `mydb`.`cliente` ( 30 `id` INT(11) NOT NULL AUTO_INCREMENT , 31 `nome` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , 32, `email` VARCHAR(130) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL 33 `ddd` VARCHAR(3) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT 34NULL , 35 `fone` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , 36 `ramal` VARCHAR(6) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL , 37 `endereco` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT 38NULL , 39 `numero` VARCHAR(7) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , 40 `complemento` VARCHAR(30) CHARACTER SET 'utf8' COLLATE 'utf8_bin' 41NULL DEFAULT NULL , `bairro` VARCHAR(150) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL 42DEFAULT NULL , 43 `cidade_id` INT(11) NOT NULL , 44 `estado_id` INT(11) NOT NULL , 45 `cep` VARCHAR(9) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL , `tipo_end` ENUM('Res','Com','Cor') CHARACTER SET 'utf8' COLLATE 46'utf8_bin' NOT NULL DEFAULT 'Res' , 47 `tipo_fone` ENUM('Res','Com','Cel') CHARACTER SET 'utf8' COLLATE 48'utf8_bin' NULL DEFAULT 'Res' , 49 `tipo_cliente` ENUM('pf','pj') CHARACTER SET 'utf8' COLLATE 50'utf8_bin' NULL DEFAULT NULL , `cnpj` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL 51DEFAULT NULL , 52 `cpf` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL 53DEFAULT NULL , 54 `inscr_estadual` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_bin' DEFAULT NULL , 55NULL `senha` VARCHAR(8) NULL DEFAULT NULL , 56 `ativo` TINYINT(1) NOT NULL DEFAULT '1' , 57 `contato` VARCHAR(150) NULL DEFAULT NULL , 58 PRIMARY KEY (`id`) , 59 INDEX `cidade_cliente_FK` (`cidade_id` ASC) , INDEX `estado_cliente_FK` (`estado_id` ASC) , 60 CONSTRAINT `cidade_cliente_FK` 61 FOREIGN KEY (`cidade_id` ) REFERENCES `mydb`.`cidade` (`id` ) 62 ON DELETE NO ACTION 63 ON UPDATE NO ACTION, 64 CONSTRAINT `estado_cliente_FK` 65 FOREIGN KEY (`estado_id` ) 66 REFERENCES `mydb`.`estado` (`id` ) ON DELETE NO ACTION 67 ON UPDATE NO ACTION) 68 ENGINE = InnoDB 69DEFAULT CHARACTER SET = utf8 70COLLATE = utf8_general_ci 71

Aps algumas introdues , vamos ao cdigo : De onde veio este exemplo existem clientes e funcionrios.Ambos so pessoas. Assim sendo temos a classe base Pessoa e as classes que estendem Pessoa que so Cliente e Funcionario. /app/model/Pessoa.php ? 1 2 3 // @arquivo = /app/model/Pessoa.php // MVC : model 4 // objeto : Pessoa 5 6 class Pessoa { 7 8 var $id; var $nome; 9 10 //construtor para poder usar o operador new() 11 public function Pessoa() {} 12 13 public function getId() { 14 return $this->id; } 15 16 public function setId($id) { 17 $this->id = $id; 18 } 19 20 public function getNome() { 21 return $this->nome; } 22 23 public function setNome($nome) { 24 $this->nome = $nome; 25 } 26 27} 28 29 /app/model/Cliente.php ? 1 2 3 4 5 6 7
// // // @arquivo = /app/model/Cliente.php MVC : model objeto : Cliente

require_once($_SERVER['DOCUMENT_ROOT'] . '/app/model/Pessoa.php'); class Cliente extends Pessoa{ var $email; var $ddd;

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

var $fone; var $ramal; var $endereco; var $enderecoNum; var $enderecoComplemento; var $bairro; var $cidadeId; var $estadoId; var $cep; var $tipoEndereco; var $tipoFone; var $tipoCliente; var $cnpj; var $cpf; var $inscrEstadual; var $senha; //auxiliar var $cidadeNome; var $estadoNome; public function Cliente() { $this->id=0; } //funcoes automagicas pode fazer assim function __set($param, $value) { $this->$param = $value; } function __get($var) { return $this->$var; } // ou fazer todos os getters e setters public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } public function getDdd() { return $this->ddd; } public function setDdd($ddd) { $this->ddd = $ddd; } public function getFone() { return $this->fone; } public function setFone($fone) { $this->fone = $fone; } public function getRamal() { return $this->ramal;

58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

} public function setRamal($ramal) { $this->ramal = $ramal; } public function getEndereco() { return $this->endereco; } public function setEndereco($endereco) { $this->endereco = $endereco; } public function getEnderecoNum() { return $this->enderecoNum; } public function setEnderecoNum($enderecoNum) { $this->enderecoNum = $enderecoNum; } public function getEnderecoComplemento() { return $this->enderecoComplemento; } public function setEnderecoComplemento($enderecoComplemento) { $this->enderecoComplemento = $enderecoComplemento; } public function getBairro() { return $this->bairro; } public function setBairro($bairro) { $this->bairro = $bairro; } public function getCidadeId() { return $this->cidadeId; } public function setCidadeId($cidadeId) { $this->cidadeId = $cidadeId; } public function getEstadoId() { return $this->estadoId; } public function setEstadoId($estadoId) { $this->estadoId = $estadoId; } public function getCep() { return $this->cep; }

108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157

public function setCep($cep) { $this->cep = $cep; } public function getTipoEndereco() { return $this->tipoEndereco; } public function setTipoEndereco($tipoEndereco) { $this->tipoEndereco = $tipoEndereco; } public function getTipoFone() { return $this->tipoFone; } public function setTipoFone($tipoFone) { $this->tipoFone = $tipoFone; } public function getTipoCliente() { return $this->tipoCliente; } public function setTipoCliente($tipoCliente) { $this->tipoCliente = $tipoCliente; } public function getCnpj() { return $this->cnpj; } public function setCnpj($cnpj) { $this->cnpj = $cnpj; } public function getCpf() { return $this->cpf; } public function setCpf($cpf) { $this->cpf = $cpf; } public function getInscrEstadual() { return $this->inscrEstadual; } public function setInscrEstadual($inscrEstadual) { $this->inscrEstadual = $inscrEstadual; } public function getSenha() { return $this->senha; } public function setSenha($senha) { $this->senha = $senha;

} 158 159 public function getCidadeNome() { 160 return $this->cidadeNome; 161 } 162 163 public function setCidadeNome($cidadeNome) { $this->cidadeNome = $cidadeNome; 164 } 165 166 public function getEstadoNome() { 167 return $this->estadoNome; 168 } 169 170 public function setEstadoNome($estadoNome) { $this->estadoNome = $estadoNome; 171 } 172 173 174 } 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 /app/controller/ClienteController.php ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

// // //

@arquivo = /app/controller/ClienteController.php MVC : controller objeto : Cliente

require_once($_SERVER['DOCUMENT_ROOT'] . '/app/model/Cliente.php'); require_once($_SERVER['DOCUMENT_ROOT'] . '/app/dao/ClienteDAO.php'); class ClienteController { // nao necessario criar um construtor function add(Cliente $cliente) { $clienteDAO = new ClienteDAO(); $clienteDAO->adicionarCliente($cliente); } function edit(Cliente $cliente) { $clienteDAO = new ClienteDAO(); $clienteDAO->atualizarCliente($cliente); } function remove($clienteId) { $clienteDAO = new ClienteDAO(); $clienteDAO->removerCliente($clienteId); } function desativar($clienteId) { $clienteDAO = new ClienteDAO(); $clienteDAO->desativarCliente($clienteId); } public function loadOptions($idPreSelecionado) { // p/ montar os combos $clienteDAO = new ClienteDAO(); $clientes = $clienteDAO->getClientes(); $conta = 0; foreach ($clientes as $cliente) { if ($idPreSelecionado == $cliente->getId()) { echo "<option $cliente-="" .="" value="\""">getId() . "\" selected=\"selected\" >" . $cliente->getNome() . "</option> \n"; } else { echo "<option $cliente-="" .="" value="\""">getId() . "\" >" . $cliente->getNome() . "</option> \n"; } $conta++; } if ($conta == 0) { echo "<option selected="\"selected\"" value="\"0\""> cliente no encontrado </option> \n"; } } public function buscaOptions($busca) { $clienteDAO = new ClienteDAO(); $clientes = $clienteDAO->getClientesBusca($busca); $conta = 0;

51 52 foreach ($clientes as $cliente) { 53 echo "<option $cliente-="" .="" value="\""">getId() . 54 "\" >" . $cliente->getNome() . "</option> \n"; 55 $conta++; 56 } 57 if ($conta == 0) { 58 echo "<option selected="\"selected\"" value="\"0\""> 59 cliente no encontrado </option> \n"; 60 } 61 } 62 63 public function atualizaPerfil(Cliente $cliente) { $clienteDAO = new ClienteDAO(); 64 $clienteDAO->atualizarPerfil($cliente); 65 } 66 67 public function getDadosPaginados($primeiroRegistro, 68 $numPorPagina, $buscaCliente) { 69 $clienteDAO = new ClienteDAO(); 70 $clientes = $clienteDAO71 >getClientesPaginados($primeiroRegistro, $numPorPagina, 72 $buscaCliente); 73 74 return $clientes; 75 } 76 public function getTotalClientes($buscaCliente) { 77 $clienteDAO = new ClienteDAO(); 78 $total = $clienteDAO->getTotalClientes($buscaCliente); 79 80 return $total; 81 } 82 83 public function loadDados($id) { $clienteDAO = new ClienteDAO(); 84 $cliente = $clienteDAO->load($id); 85 return $cliente; 86 } 87 88 public function localizarReexecucoes(Cliente $cliente) { 89 $clienteDAO = new ClienteDAO(); 90 $total = $clienteDAO->getTotalReexecucoes($cliente); 91 return $total; 92 } 93 94 public function getListaClientes() { 95 $clienteDAO = new ClienteDAO(); $clientes = $clienteDAO->getClientes(); 96 return $clientes; 97 } 98 99 } 100

101 102 103 104 105 /app/dao/ClienteDAO.php ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42


// // // @arquivo = /app/dao/ClienteDAO.php MVC : controller objeto : Cliente

require_once($_SERVER['DOCUMENT_ROOT'] . '/app/model/Cliente.php'); require_once($_SERVER['DOCUMENT_ROOT'] . '/lib/Conexao.php'); class ClienteDAO { public function ClienteDAO() { } public function adicionarCliente(Cliente $cliente) { $sqlQuery = "INSERT INTO `mydb`.`cliente` ( `nome`, `email`, `ddd`, `fone`, `ramal`, `endereco`, `numero`, `complemento`, `bairro`, `cidade_id`, `estado_id`, `cep`, `tipo_end`, `tipo_fone`, `tipo_cliente`, `cnpj`, `cpf`, `inscr_estadual`, `senha`) VALUES (" . "'" . $cliente->getNome() . "'," . "'" . $cliente->getEmail() . "'," . "'" . $cliente->getDdd() . "'," . "'" . $cliente->getFone() . "'," . "'" . $cliente->getRamal() . "'," . "'" . $cliente->getEndereco() . "'," . "'" . $cliente->getEnderecoNum() . "'," . "'" . $cliente->getEnderecoComplemento() . "'," . "'" . $cliente->getBairro() . "'," . $cliente->getCidadeId() . "," . $cliente->getEstadoId() . "," . "'" . $cliente->getCep() . "'," . "'" . $cliente->getTipoEndereco() . "'," . "'" . $cliente->getTipoFone() . "',"

43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

. . . . . .

"'" . "'" . "'" . "'" . "'" . ")";

$cliente->getTipoCliente() . "'," $cliente->getCnpj() . "'," $cliente->getCpf() . "'," $cliente->getInscrEstadual() . "'," $cliente->getSenha() . "' "

$conexao = new Conexao(); $conexao->conecta(); $rs = $conexao->executeUpdate($sqlQuery); $conexao->desconecta(); } public function atualizarCliente(Cliente $cliente) { $sqlQueryUpdate = "UPDATE `mydb`.`cliente` SET " . "`nome`='" . $cliente->getNome() . "'," . "`email`='" . $cliente->getEmail() . "'," . "`ddd`='" . $cliente->getDdd() . "'," . "`fone`='" . $cliente->getFone() . "'," . "`ramal`='" . $cliente->getRamal() . "'," . "`endereco`='" . $cliente->getEndereco() . "'," . "`numero`='" . $cliente->getEnderecoNum() . "'," . "`complemento`='" . $cliente>getEnderecoComplemento() . "'," . "`bairro`='" . $cliente->getBairro() . "'," . "`cidade_id`=" . $cliente->getCidadeId() . "," . "`estado_id`=" . $cliente->getEstadoId() . "," . "`cep`='" . $cliente->getCep() . "'," . "`tipo_end`='" . $cliente->getTipoEndereco() . "'," . "`tipo_fone`='" . $cliente->getTipoFone() . "'," . "`tipo_cliente`='" . $cliente->getTipoCliente() . "'," . "`cnpj`='" . $cliente->getCnpj() . "'," . "`cpf`='" . $cliente->getCpf() . "'," . "`inscr_estadual`='" . $cliente>getInscrEstadual() . "'," . "`senha`='" . $cliente->getSenha() . "' " . "WHERE `id`=" . $cliente->getId(); //echo 'entrei aqui'; //print_r($cliente); // echo $sqlQueryUpdate; $conexao = new Conexao(); $conexao->conecta(); $rs = $conexao->executeUpdate($sqlQueryUpdate); $conexao->desconecta(); } public function removerCliente($clienteId) { $sqlQuery = "DELETE FROM `mydb`.`cliente` " . "WHERE `id`=" . $clienteId; //echo $sqlQuery; $conexao = new Conexao(); $conexao->conecta(); try{ $rs = $conexao->executeUpdate($sqlQuery); $conexao->desconecta(); }

//

93 public function desativarCliente($clienteId) { 94 $sqlQuery = "UPDATE `mydb`.`cliente` 95 SET ativo = false " 96 . "WHERE `id`=" . $clienteId; 97 //echo $sqlQuery; $conexao = new Conexao(); 98 $conexao->conecta(); 99 $rs = $conexao->executeUpdate($sqlQuery); 100 $conexao->desconecta(); 101 } 102 103 public function getClientes() { 104 $arrClientes = array(); 105 $indice = 0; 106 $sqlQuery = "Select id,nome from cliente order by nome"; 107 108 $conexao = new Conexao(); 109 $conexao->conecta(); $rs = $conexao->executeQuery($sqlQuery); 110 111 while ($row = mysql_fetch_array($rs)) { 112 $cliente = new Cliente(); 113 $cliente->setId($row['id']); 114 $cliente->setNome($row['nome']); 115 $arrClientes[$indice] = $cliente; $indice++; 116 } 117 118 $conexao->desconecta(); 119 return $arrClientes; 120 } 121 122 public function getClientesBusca($busca) { $arrClientes = array(); 123 $indice = 0; 124 $sqlQuery = "Select id,nome from cliente where nome like '%" 125. $busca . "%' order by nome"; 126 127 $conexao = new Conexao(); $conexao->conecta(); 128 $rs = $conexao->executeQuery($sqlQuery); 129 130 while ($row = mysql_fetch_array($rs)) { 131 $cliente = new Cliente(); 132 $cliente->setId($row['id']); 133 $cliente->setNome($row['nome']); $arrClientes[$indice] = $cliente; 134 $indice++; 135 } 136 137 $conexao->desconecta(); 138 return $arrClientes; } 139 140 public function atualizarPerfil(Cliente $cliente) { 141 $sqlQueryUpdate = "UPDATE `mydb`.`cliente` 142 SET "

. "`nome`='" . $cliente->getNome() . "'," 143 . "`email`='" . $cliente->getEmail() . "'," 144 . "`ddd`='" . $cliente->getDdd() . "'," 145 . "`fone`='" . $cliente->getFone() . "'," 146 . "`ramal`='" . $cliente->getRamal() . "'," . "`tipo_fone`='" . $cliente->getTipoFone() . "'," 147 // . "`senha`='" . $cliente->getSenha() . "' " 148 . "WHERE `id`=" . $cliente->getId(); 149 $conexao = new Conexao(); 150 $conexao->conecta(); 151 $rs = $conexao->executeUpdate($sqlQueryUpdate); $conexao->desconecta(); 152 } 153 154 public function getClientesPaginados($primeiroRegistro, 155$numPorPagina, $buscaCliente) { 156 $sqlQuery = "Select CL.*,C.nome as cidade,E.nome as estado 157from cliente CL left join estado E on (CL.estado_id = E.id) 158left join cidade C on (CL.cidade_id=C.id ) "; if ($buscaCliente != NULL) { 159 $sqlQuery.=" WHERE CL.nome like '%" . $buscaCliente . 160"%' "; 161 } 162 $sqlQuery.= " LIMIT " . $primeiroRegistro . "," . 163 164$numPorPagina; $conexao = new Conexao(); 165 $conexao->conecta(); 166 $rs = $conexao->executeQuery($sqlQuery); 167 $cache = array(); while ($row = mysql_fetch_array($rs)) { 168 169 $cliente = new Cliente(); 170 $cliente->setId($row['id']); 171 $cliente->setNome($row['nome']); 172 $cliente->setEmail($row['email']); $cliente->setDdd($row['ddd']); 173 $cliente->setFone($row['fone']); 174 $cliente->setRamal($row['ramal']); 175 $cliente->setEndereco($row['endereco']); 176 $cliente->setEnderecoNum($row['numero']); 177 $cliente->setEnderecoComplemento($row['complemento']); $cliente->setBairro($row['bairro']); 178 $cliente->setCidadeId($row['cidade_id']); 179 $cliente->setEstadoId($row['estado_id']); 180 $cliente->setTipoEndereco($row['tipo_end']); 181 $cliente->setTipoFone($row['tipo_fone']); $cliente->setTipoCliente($row['tipo_cliente']); 182 $cliente->setCnpj($row['cnpj']); 183 $cliente->setCpf($row['cpf']); 184 $cliente->setInscrEstadual($row['inscr_estadual']); 185 $cliente->setSenha($row['senha']); 186 187 $cliente->setCidadeNome($row['cidade']); $cliente->setEstadoNome($row['estado']); 188 $line = array( 189 'id' => $cliente->getId(), 190 'nome' => $cliente->getNome(), 191 'email' => $cliente->getEmail() ); 192

193 194 195 196 197 198 199 200 201 202 203 204 205"; 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237// 238 239 240 241 242

array_push($cache, $line); } $conexao->desconecta(); return $cache; } public function getTotalClientes($buscaCliente) { $conexao = new Conexao(); $conexao->conecta(); $sqlQuery = "SELECT COUNT(*) as total FROM mydb.cliente C "; if ($buscaCliente != NULL) { $sqlQuery.=" WHERE C.nome like '%" . $buscaCliente . "%' } $rs = $conexao->executeQuery($sqlQuery); $total = 0; while ($row = mysql_fetch_array($rs)) { $total = $row['total']; } $conexao->desconecta(); } public function load($id) { $conexao = new Conexao(); $conexao->conecta(); $sqlQuery = "SELECT * FROM mydb.cliente C where id=" . $id; $rs = $conexao->executeQuery($sqlQuery); $cliente = new Cliente(); if ($row = mysql_fetch_array($rs)) { $cliente->setId($row['id']); $cliente->setNome($row['nome']); $cliente->setEmail($row['email']); $cliente->setTipoCliente($row['tipo_cliente']); $cliente->setCpf($row['cpf']); $cliente->setCnpj($row['cnpj']); $cliente->setDdd($row['ddd']); $cliente->setFone($row['fone']); $cliente->setRamal($row['ramal']); $cliente->setEndereco($row['endereco']); $cliente->setEnderecoNum($row['numero']); $cliente->setEnderecoComplemento($row['complemento']); $cliente->setBairro($row['bairro']); $cliente->setCidadeId($row['cidade_id']); $cliente->setEstadoId($row['estado_id']); $cliente->setTipoEndereco($row['tipo_end']); $cliente->setTipoFone($row['tipo_fone']); $cliente->setInscrEstadual($row['inscr_estadual']); $cliente->setSenha($row['senha']); } $conexao->desconecta(); return $cliente; } public function getTotalReexecucoes(Cliente $cliente) { $conexao = new Conexao();

$conexao->conecta(); 243 $total = 0; 244 $sqlQuery = "Select count(*) as total from ordem_servico OS 245LEFT JOIN servicos_ordem_servico SOS on (SOS.ordem_servico_id = 246OS.id) 247where OS.cliente_id=" . $cliente->getId() . " 248and SOS.reexecucao=1 >= DATE_SUB(NOW(), INTERVAL 3 MONTH) "; 249and OS.data_entrada $rs = $conexao->executeQuery($sqlQuery); 250 while ($row = mysql_fetch_array($rs)) { 251 $total = $row['total']; } 252 $conexao->desconecta(); 253 return $total; 254 } 255 256} 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292

293 294 295 296 297 /lib/Conexao.php ? 1 <? /* 2 @arquivo = /lib/Conexao.php 3 MVC : controller 4 objeto : Conexao 5 obs : arquivo em uso na verso corrente 6 */ 7 Class Conexao { 8 9 var $host; 10 var $user; var $pass; 11 var $dbname; 12 var $data; 13 var $db; 14 var $saida; var $status; 15 var $entrada; 16 17 function Conexao() { 18 19 } 20 21 public function conecta() { 22 $this->status = 0; $this->host = "SERVIDOR"; 23 $this->user = "LOGIN_BANCO"; 24 $this->pass = "SENHA_BANCO"; 25 $this->dbname = "NOME_DB"; 26 $this->db = mysql_connect($this->host, $this->user, $this27>pass); 28 if (!$this->db) { 29 // echo "Erro ao conectar no 30 banco".trigger_error(mysql_error(),E_USER_ERROR); 31 echo "Erro ao conectar no banco" . mysql_error(); 32 } else { //echo "Conectado no banco"; 33 $this->status = 1; 34 } 35 mysql_select_db($this->dbname, $this->db); 36 mysql_set_charset('utf8'); 37 } 38 public function executeQuery($query) { 39 if ($this->status == 1) { 40 //echo "lista..."; 41 if ($this->saida = mysql_query($query)) { 42 // echo 'Rs loaded';

return $this->saida; 43 } else { 44 echo "<pre class=\"error\">"; 45 echo "SQL ERROR: " . mysql_error(); 46 echo "SQL : " . $query; echo "</pre>"; 47 desconecta(); 48 } 49 } 50 } 51 52 public function executeUpdate($query) { if ($this->status == 1) { 53 if ($this->entrada = mysql_query($query)) { 54 return true; 55 } else { 56 echo "<pre class=\"error\">"; echo "SQL ERROR: " . mysql_error(); 57 echo "</pre>"; 58 desconecta(); 59 return false; 60 } 61 } } 62 63 function desconecta() { 64 return mysql_close($this->db); 65 } 66 67} 68 69?> 70 71 72 73 74 75 76 77 78 79 80 Agora com a estrutura completa, basta criar a View que mostrar a lista de clientes /pages/listaClientes.php ?

1 2 3 4 5 6 7 8

// // // // //

@arquivo = /pages/listaClientes.php @arquivo = /pages/listaClientes.php MVC : view objeto : Cliente obs : exemplo para o blog

//se o container j no tiver incluido, inclui require_once($_SERVER['DOCUMENT_ROOT'] . '/app/controller/ClienteController.php');

9 $clienteC = new ClienteController(); 10$cache = $clienteC->getListaClientes(); // carrega os registros do array para a view 11$total = count($cache); 12?> 13<table width="85%" border="0" cellspacing="2" cellpadding="0"> <tr> 14 <th>ID</th> 15 <th>NOME</th> 16 <th>EMAIL</th> 17 </tr> <? if ($total > 0) { 18 for ($i = 0; $i < $total; $i++) { 19 $idCliente = $cache[$i]->getId(); 20 $clienteNome = $cache[$i]->getNome(); 21 ?> <tr> 22 <td><? echo $idCliente; ?></td> 23 <td><? echo $clienteNome; ?></td> 24 <td><? echo $cache[$i]->getEmail(); ?></td> 25 </tr> 26 <? } 27 } 28 ?> 29 <tr> 30 <th colspan="3">Total: <? echo $total; ?></th> 31 </tr> 32</table> 33 34 35 36 37 Resultado :

Figura 4- Resultado e para dar carga nessa tabela troquei o seguinte trecho da linha 11: ? 1 $arrClientes=array(); for ($x=0;$x<=5;$x++){ 2 $cliente = new Cliente(); 3 $cliente->setId($x); 4 $cliente->setNome("Cliente ".$x); $cliente->setEmail("cliente".$x."@exemploblog"); 5

$arrClientes[$x] = $cliente; 6 } 7 8 $cache = $arrClientes; 9 10

Simples n ? Espero ter simplificado a implementao MVC em uma aplicao PHP. At a prxima...

Vous aimerez peut-être aussi