mvc php- php oop

38
MVC PHP- PHP OOP Olá. Neste post pretendo demonstrar um exemplo simples e prático de como usar o PHP orientado a objetos no esquema MVC (Model View Controller ). Observação : esse esquema passa a funcionar muito bem a partir do PHP 5.3 O resultado final será uma página que lista os clientes cadastrados. (nos próximos posts de PHP posso detalhar as funções CRUD) Não pretendo discutir os conceitos de MVC, apenas mostrar sua implementação em PHP, destacando a facilidade de construção e manutenção de código, quando as partes (camadas) da aplicação estão separadas em : M- Modelo de Dados: estrutura dos Objetos (Classes) V-View: Interface de apresentação dos dados p/ o Usuário (Telas ou páginas) C- Controle : Regras de negócios (Componentes e Controllers) Essas camadas devem ser independentes, ou seja : se mudar alguma regra de negócio, esta deve ser implementada na camada de Controle, assim como se a interface for alterada, não existe a a necessidade de se mexer nas regras. Eu costumo utilizar mais uma "camada" em minhas aplicações conhecida como DAO (Data Access Object) que é a camada responsável pela comunicação com o Banco de Dados. Esta é utilizada pela camada de Controle para carregar os Modelos com os dados e entregar para as Views.

Upload: aureliano-duarte

Post on 27-Oct-2015

324 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: MVC PHP- PHP OOP

MVC PHP- PHP OOP

Olá. Neste post pretendo demonstrar um exemplo simples e prático de como usar o PHP orientado a objetos no esquema MVC (Model View Controller).Observação : esse esquema passa a funcionar muito bem a partir do PHP 5.3

O resultado final será uma página que lista os clientes cadastrados.(nos próximos posts de PHP posso detalhar as funções CRUD)

Não pretendo discutir os conceitos de MVC, apenas mostrar sua implementação em PHP, destacando a facilidade de construção e manutenção de código, quando as partes (camadas) da aplicação estão separadas em :M- Modelo de Dados: estrutura dos Objetos (Classes)V-View: Interface de apresentação dos dados p/ o Usuário (Telas ou páginas)C- Controle : Regras de negócios (Componentes e Controllers)

Essas camadas devem ser independentes, ou seja : se mudar alguma regra de negócio, esta deve ser implementada na camada de Controle, assim como se a interface for alterada, não existe a a necessidade de se mexer nas regras.

Eu costumo utilizar mais uma "camada" em minhas aplicações conhecida como DAO (Data Access Object) que é a camada responsável pela comunicação com o Banco de Dados. Esta é utilizada pela camada de Controle para carregar os Modelos com os dados e entregar para as Views.

Page 2: MVC PHP- PHP OOP

Figura 1- Resumo MVC

Exemplo de organização de código : (Neste exemplo mostrarei com a seção clientes)

Page 4: MVC PHP- PHP OOP

Figura 2- Estrutura de pastas e arquivos

--App :--Controller : cada Objeto tem o seu, é onde ficam as regras de negócio

--DAO : cada Objeto tem o seu

--Model : quase todas as entidades do DB possuem o seu Objeto e outras informações que sejam compartilhadas em várias seções do site 

View : cada Objeto tem sua pasta com as operações básicas de qualquer CRUD (Create Read Update Delete) e um índice (lista inicial)C->  add.phpR->  view.phpU->  edit.phpD-> remove.php

--lib : pasta que contém as principais funções compartilhadas  do sistema.

pastas com itens de layout do site :--css : estilos css--images : imagens da seção pública--img : imagens da seção privada--js : arquivos javascript--pages : as páginas do site--static_includes : arquivos que não mudam : meta-tags, cabeçalho, rodapé

Page 5: MVC PHP- PHP OOP

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

Figura 3- Diagrama do DB

?

12345678910111213141516

-- estado

CREATE  TABLE IF NOT EXISTS `mydb`.`estado` (  `id` INT(11) NOT NULL AUTO_INCREMENT ,  `uf` VARCHAR(2) NULL DEFAULT NULL ,  `nome` VARCHAR(45) NULL DEFAULT NULL ,  PRIMARY KEY (`id`) )ENGINE = InnoDBAUTO_INCREMENT = 28DEFAULT CHARACTER SET = utf8COLLATE = utf8_general_ci

-- cidade

CREATE  TABLE IF NOT EXISTS `mydb`.`cidade` (  `id` INT(11) NOT NULL AUTO_INCREMENT ,  `estado_id` INT(11) NOT NULL ,  `uf` VARCHAR(2) NULL DEFAULT NULL ,  `nome` VARCHAR(120) NULL DEFAULT NULL ,  PRIMARY KEY (`id`) ,  INDEX `estado_cidade_FK` (`estado_id` ASC) ,  CONSTRAINT `estado_cidade_FK`    FOREIGN KEY (`estado_id` )    REFERENCES `mydb`.`estado` (`id` )    ON DELETE NO ACTION    ON UPDATE NO ACTION)ENGINE = InnoDBAUTO_INCREMENT = 9715DEFAULT CHARACTER SET = utf8

Page 6: MVC PHP- PHP OOP

17181920212223242526272829303132333435363738394041

COLLATE = utf8_general_ci

-- cliente

CREATE  TABLE IF NOT EXISTS `mydb`.`cliente` (  `id` INT(11) NOT NULL AUTO_INCREMENT ,  `nome` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL ,  `email` VARCHAR(130) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL ,  `ddd` VARCHAR(3) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `fone` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL ,  `ramal` VARCHAR(6) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `endereco` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL ,  `numero` VARCHAR(7) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL ,  `complemento` VARCHAR(30) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `bairro` VARCHAR(150) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `cidade_id` INT(11) NOT NULL ,  `estado_id` INT(11) NOT NULL ,  `cep` VARCHAR(9) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL ,  `tipo_end` ENUM('Res','Com','Cor') CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL DEFAULT 'Res' ,  `tipo_fone` ENUM('Res','Com','Cel') CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT 'Res' ,  `tipo_cliente` ENUM('pf','pj') CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `cnpj` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `cpf` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `inscr_estadual` VARCHAR(15) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NULL DEFAULT NULL ,  `senha` VARCHAR(8) NULL DEFAULT NULL ,  `ativo` TINYINT(1) NOT NULL DEFAULT '1' ,  `contato` VARCHAR(150) NULL DEFAULT NULL ,  PRIMARY KEY (`id`) ,  INDEX `cidade_cliente_FK` (`cidade_id` ASC) ,  INDEX `estado_cliente_FK` (`estado_id` ASC) ,  CONSTRAINT `cidade_cliente_FK`    FOREIGN KEY (`cidade_id` )    REFERENCES `mydb`.`cidade` (`id` )    ON DELETE NO ACTION    ON UPDATE NO ACTION,  CONSTRAINT `estado_cliente_FK`    FOREIGN KEY (`estado_id` )    REFERENCES `mydb`.`estado` (`id` )    ON DELETE NO ACTION    ON UPDATE NO ACTION)ENGINE = InnoDBDEFAULT CHARACTER SET = utf8COLLATE = utf8_general_ci

Page 7: MVC PHP- PHP OOP

42434445464748495051525354555657585960616263646566

Page 8: MVC PHP- PHP OOP

6768697071

Após algumas introduções , vamos ao código : De onde veio este exemplo existem clientes e funcionários.Ambos são pessoas.Assim sendo temos a classe base Pessoa e as classes que estendem Pessoa que são Cliente e Funcionario. /app/model/Pessoa.php?

12345678910111213141516171819

//  @arquivo = /app/model/Pessoa.php//  MVC : model//  objeto : Pessoa

class Pessoa {

    var $id;    var $nome;

    //construtor para poder usar o operador new()    public function Pessoa() {}

    public function getId() {        return $this->id;    }

    public function setId($id) {        $this->id = $id;    }

    public function getNome() {        return $this->nome;    }

    public function setNome($nome) {        $this->nome = $nome;    }

}

Page 9: MVC PHP- PHP OOP

20212223242526272829/app/model/Cliente.php?

12345678910111213141516171819202122232425262728

//  @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;    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;    }

Page 10: MVC PHP- PHP OOP

2930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

    //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;    }

    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;

Page 11: MVC PHP- PHP OOP

798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128

    }

    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;    }

    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;    }

Page 12: MVC PHP- PHP OOP

129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178

    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;    }

    public function getCidadeNome() {        return $this->cidadeNome;    }

    public function setCidadeNome($cidadeNome) {        $this->cidadeNome = $cidadeNome;    }

    public function getEstadoNome() {        return $this->estadoNome;    }

    public function setEstadoNome($estadoNome) {        $this->estadoNome = $estadoNome;    }

}

Page 13: MVC PHP- PHP OOP

179180181182183184185186187188189190191192193194195196197198199200201202203204/app/controller/ClienteController.php?

12345678910111213141516171819202122

//  @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);    }

Page 14: MVC PHP- PHP OOP

2324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

    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 não encontrado </option> \n";        }    }

    public function buscaOptions($busca) {        $clienteDAO = new ClienteDAO();        $clientes = $clienteDAO->getClientesBusca($busca);        $conta = 0;

        foreach ($clientes as $cliente) {            echo "<option $cliente-="" .="" value="\""">getId() . "\" >" . $cliente->getNome() . "</option> \n";            $conta++;        }

        if ($conta == 0) {            echo "<option selected="\"selected\"" value="\"0\""> cliente não encontrado </option> \n";        }    }

    public function atualizaPerfil(Cliente $cliente) {        $clienteDAO = new ClienteDAO();        $clienteDAO->atualizarPerfil($cliente);    }

    public function getDadosPaginados($primeiroRegistro, $numPorPagina, $buscaCliente) {

        $clienteDAO = new ClienteDAO();        $clientes = $clienteDAO-

Page 15: MVC PHP- PHP OOP

737475767778798081828384858687888990919293949596979899100101102103104105

>getClientesPaginados($primeiroRegistro, $numPorPagina, $buscaCliente);

        return $clientes;    }

    public function getTotalClientes($buscaCliente) {        $clienteDAO = new ClienteDAO();        $total = $clienteDAO->getTotalClientes($buscaCliente);

        return $total;    }

    public function loadDados($id) {        $clienteDAO = new ClienteDAO();        $cliente = $clienteDAO->load($id);        return $cliente;    }

    public function localizarReexecucoes(Cliente $cliente) {

        $clienteDAO = new ClienteDAO();        $total = $clienteDAO->getTotalReexecucoes($cliente);        return $total;    }

    public function getListaClientes() {        $clienteDAO = new ClienteDAO();        $clientes = $clienteDAO->getClientes();        return $clientes;    }

}

/app/dao/ClienteDAO.php?

123456789

//  @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() {

Page 16: MVC PHP- PHP OOP

1011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859

    }

    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() . "',"                . "'" . $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() . "',"

Page 17: MVC PHP- PHP OOP

60616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104

                . "`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();    }

    public function desativarCliente($clienteId) {        $sqlQuery = "UPDATE  `mydb`.`cliente`  SET ativo = false "                . "WHERE `id`=" . $clienteId;        //echo $sqlQuery;        $conexao = new Conexao();        $conexao->conecta();        $rs = $conexao->executeUpdate($sqlQuery);        $conexao->desconecta();    }

    public function getClientes() {

        $arrClientes = array();        $indice = 0;        $sqlQuery = "Select id,nome from cliente order by nome";

        $conexao = new Conexao();

Page 18: MVC PHP- PHP OOP

105106107108109110111112113114115116117118119120121122123124125126127128129

        $conexao->conecta();        $rs = $conexao->executeQuery($sqlQuery);

        while ($row = mysql_fetch_array($rs)) {            $cliente = new Cliente();            $cliente->setId($row['id']);            $cliente->setNome($row['nome']);            $arrClientes[$indice] = $cliente;            $indice++;        }

        $conexao->desconecta();        return $arrClientes;    }

    public function getClientesBusca($busca) {        $arrClientes = array();        $indice = 0;        $sqlQuery = "Select id,nome from cliente where nome like '%" . $busca . "%' order by nome";

        $conexao = new Conexao();        $conexao->conecta();        $rs = $conexao->executeQuery($sqlQuery);

        while ($row = mysql_fetch_array($rs)) {            $cliente = new Cliente();            $cliente->setId($row['id']);            $cliente->setNome($row['nome']);            $arrClientes[$indice] = $cliente;            $indice++;        }

        $conexao->desconecta();        return $arrClientes;    }

    public function atualizarPerfil(Cliente $cliente) {        $sqlQueryUpdate = "UPDATE  `mydb`.`cliente`                 SET "                . "`nome`='" . $cliente->getNome() . "',"                . "`email`='" . $cliente->getEmail() . "',"                . "`ddd`='" . $cliente->getDdd() . "',"                . "`fone`='" . $cliente->getFone() . "',"                . "`ramal`='" . $cliente->getRamal() . "',"                . "`tipo_fone`='" . $cliente->getTipoFone() . "',"//                . "`senha`='" . $cliente->getSenha() . "' "                . "WHERE `id`=" . $cliente->getId();        $conexao = new Conexao();        $conexao->conecta();        $rs = $conexao->executeUpdate($sqlQueryUpdate);        $conexao->desconecta();    }

    public function getClientesPaginados($primeiroRegistro, $numPorPagina, $buscaCliente) {        $sqlQuery = "Select CL.*,C.nome as cidade,E.nome as estadofrom cliente CL left join estado E on (CL.estado_id = E.id)left join  cidade C on (CL.cidade_id=C.id ) ";

Page 19: MVC PHP- PHP OOP

130131132133134135136137138139140141142143144145146147148149150151152153154

        if ($buscaCliente != NULL) {            $sqlQuery.=" WHERE CL.nome like '%" . $buscaCliente . "%' ";        }

        $sqlQuery.= " LIMIT " . $primeiroRegistro . "," . $numPorPagina;        $conexao = new Conexao();        $conexao->conecta();        $rs = $conexao->executeQuery($sqlQuery);        $cache = array();        while ($row = mysql_fetch_array($rs)) {

            $cliente = new Cliente();            $cliente->setId($row['id']);            $cliente->setNome($row['nome']);            $cliente->setEmail($row['email']);            $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->setTipoCliente($row['tipo_cliente']);            $cliente->setCnpj($row['cnpj']);            $cliente->setCpf($row['cpf']);            $cliente->setInscrEstadual($row['inscr_estadual']);            $cliente->setSenha($row['senha']);

            $cliente->setCidadeNome($row['cidade']);            $cliente->setEstadoNome($row['estado']);            $line = array(                'id' => $cliente->getId(),                'nome' => $cliente->getNome(),                'email' => $cliente->getEmail()            );            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)) {

Page 20: MVC PHP- PHP OOP

155156157158159160161162163164165166167168169170171172173174175176177178179

            $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();        $total = 0;        $sqlQuery = "Select count(*) as total from ordem_servico OSLEFT JOIN servicos_ordem_servico SOS on (SOS.ordem_servico_id = OS.id)where OS.cliente_id=" . $cliente->getId() . "and SOS.reexecucao=1and OS.data_entrada >= DATE_SUB(NOW(), INTERVAL 3 MONTH) ";        $rs = $conexao->executeQuery($sqlQuery);        while ($row = mysql_fetch_array($rs)) {            $total = $row['total'];        }        $conexao->desconecta();        return $total;    }

}

Page 21: MVC PHP- PHP OOP

180181182183184185186187188189190191192193194195196197198199200201202203204

Page 22: MVC PHP- PHP OOP

205206207208209210211212213214215216217218219220221222223224225226227228229

Page 23: MVC PHP- PHP OOP

230231232233234235236237238239240241242243244245246247248249250251252253254

Page 24: MVC PHP- PHP OOP

255256257258259260261262263264265266267268269270271272273274275276277278279

Page 25: MVC PHP- PHP OOP

280281282283284285286287288289290291292293294295296297/lib/Conexao.php?

123456789101

<?/*  @arquivo = /lib/Conexao.php  MVC :  controller  objeto : Conexao  obs : arquivo em uso na versão corrente */

Class Conexao {

    var $host;    var $user;    var $pass;    var $dbname;

Page 26: MVC PHP- PHP OOP

11213141516171819202122232425262728293031323334353

    var $data;    var $db;    var $saida;    var $status;    var $entrada;

    function Conexao() {

    }

    public function conecta() {        $this->status = 0;        $this->host = "SERVIDOR";        $this->user = "LOGIN_BANCO";        $this->pass = "SENHA_BANCO";        $this->dbname = "NOME_DB";        $this->db = mysql_connect($this->host, $this->user, $this->pass);

        if (!$this->db) {//  echo "Erro ao conectar no banco".trigger_error(mysql_error(),E_USER_ERROR);            echo "Erro ao conectar no banco" . mysql_error();        } else {            //echo "Conectado no banco";            $this->status = 1;        }        mysql_select_db($this->dbname, $this->db);        mysql_set_charset('utf8');    }

    public function executeQuery($query) {        if ($this->status == 1) {            //echo "lista...";            if ($this->saida = mysql_query($query)) {                // echo 'Rs loaded';                return $this->saida;            } else {                echo "<pre class=\"error\">";                echo "SQL ERROR: " . mysql_error();                echo "SQL : " . $query;                echo "</pre>";                desconecta();            }        }    }

    public function executeUpdate($query) {        if ($this->status == 1) {            if ($this->entrada = mysql_query($query)) {                return true;            } else {                echo "<pre class=\"error\">";                echo "SQL ERROR: " . mysql_error();                echo "</pre>";                desconecta();                return false;            }        }    }

Page 27: MVC PHP- PHP OOP

63738394041424344454647484950515253545556575859606

    function desconecta() {        return mysql_close($this->db);    }

}

?>

Page 28: MVC PHP- PHP OOP

162636465666768697071727374757677787980Agora com a estrutura completa, basta criar a View que mostrará a lista de clientes /pages/listaClientes.php?

1234567

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

//se o container já não tiver incluido, incluirequire_once($_SERVER['DOCUMENT_ROOT'] . '/app/controller/ClienteController.php');

Page 29: MVC PHP- PHP OOP

89101112131415161718192021222324252627282930313233

$clienteC = new ClienteController();$cache = $clienteC->getListaClientes(); // carrega os registros do array para a view$total = count($cache);?><table width="85%" border="0" cellspacing="2" cellpadding="0">    <tr>        <th>ID</th>        <th>NOME</th>        <th>EMAIL</th>    </tr>    <? if ($total > 0) {        for ($i = 0; $i < $total; $i++) {            $idCliente = $cache[$i]->getId();            $clienteNome = $cache[$i]->getNome();            ?>            <tr>                <td><? echo $idCliente; ?></td>                <td><? echo $clienteNome; ?></td>                <td><? echo $cache[$i]->getEmail(); ?></td>            </tr>            <?        }    }    ?>    <tr>        <th colspan="3">Total: <? echo $total; ?></th>    </tr></table>

Page 30: MVC PHP- PHP OOP

34353637Resultado : 

Figura 4- Resultado

e para dar carga nessa tabela troquei o seguinte trecho da linha 11: ?

12345678910

$arrClientes=array();    for ($x=0;$x<=5;$x++){        $cliente = new Cliente();            $cliente->setId($x);            $cliente->setNome("Cliente ".$x);            $cliente->setEmail("cliente".$x."@exemploblog");            $arrClientes[$x] = $cliente;    }

$cache = $arrClientes;

Simples né ? Espero ter simplificado a implementação MVC em uma aplicação PHP.

Até a próxima...