exemplo de mvc com php e outros padrões de projeto
Post on 07-Feb-2018
220 Views
Preview:
TRANSCRIPT
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
1/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 1/33
Busca Busca
DigitalDev
Paraquem gosta de programar
IncioLinguagens, para que servem?
DigitalDev> Padres de Projeto> MVC> Exemplo de MVC com PHP
Entendendo o MVC (Model-View-Controller)
DigitalDev na Campus Party 2013
jan 22
Exemplo de MVC com PHPCategorias:
MVC, Padres de Projeto
por Tarcsio
Nesse artigo irei demonstrar na prtica, a aplicao do padro de projeto MVC com PHP. Para isso,construirei um aplicativo de Agenda de Contatos Telefnicosconforme requisitos funcionais,diagramas e cdigo que sero mostrados ao longo desse texto. Mas, antes de comear, aconselho avocs que leiam o artigo de introduo a MVC, o mesmo poder ser visualizado acessando o linkEntendendo o MVC (Model-View-Controller).
Hierarquia de Diretrios
Conforme a Imagem 1, irei seguir um padro de hierarquia de diretrios e arquivos, vou explicar sobreas responsabilidades dos diretrios e arquivos logo abaixo.
http://www.digitaldev.com.br/author/tarcisio/http://www.digitaldev.com.br/2013/01/18/entendendo-o-mvc-model-view-controller/http://www.digitaldev.com.br/2012/08/14/entendendo-o-m%E2%80%A6iew-controllerhttp://www.digitaldev.com.br/author/tarcisio/http://www.digitaldev.com.br/category/padroes-de-projeto/http://www.digitaldev.com.br/category/padroes-de-projeto/mvc/http://www.digitaldev.com.br/2013/02/06/digitaldev-na-campus-party-2013/http://www.digitaldev.com.br/2013/01/18/entendendo-o-mvc-model-view-controller/http://www.digitaldev.com.br/category/padroes-de-projeto/mvc/http://www.digitaldev.com.br/category/padroes-de-projeto/http://www.digitaldev.com.br/http://www.digitaldev.com.br/linguagens/http://www.digitaldev.com.br/http://www.digitaldev.com.br/https://plus.google.com/102511269987617651417/http://facebook.com/DigitalDevhttp://twitter.com/digitaldevBRhttp://www.digitaldev.com.br/feed/ -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
2/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 2/33
Imagem 1 Hierarquia de Diretrios e Pastas
Diretrio controllers
Conforme se pode deduzir pelo nome, irei us-lo para guardar as classes da camada de controle dosistema, as famosas classescontroladorasoucontrollers, responsveis por fazer o intermdio entre acamada de dados (modelsou modelos) e visualizao (views), conforme o artigo deintroduo aMVCcitado acima.
Diretrio databases
Por se tratar de um projeto apenas de exemplo, irei persistir os dados dos contatose telefonesusandoum banco de dados SQLite, nesse diretrio que o arquivo referente ao banco ficar.
Caso queria conectar a aplicao com o MySQL, veja como no fim do artigo
Diretrio lib
Nesse diretrio, irei guardar as classes diretamente ligadas ao sistema, como por exemplo, classes defiltros de dados, validaes genricas, helpers(caso haja algum), interfaces e abstraes no ligadas camada de negcio do sistema. Se estivesse construindo um framework em PHP, guardaria as classesdo mesmo nesse diretrio.
Diretrio models
Aqui, guardarei as classes de dados diretamente abstradas e ligadas s regras de negcio do sistema,como por exemplo, as classes Contatoe Telefone, entre outras.
Diretrio views
Esse o diretrio onde guardarei os arquivosHTMLdo sistema, tais arquivos representam a camada devisualizao (view), da qual foi falada no artigo de introduo ao MVC.
Arquivo index.php
um arquivo ndex como qualquer outro, nele que a execuo do sistema ir comear.
Implementao das Classes das Camadas
Classes Primrias ou Genricas
Depois de todos os diretrios explicados, mostrarei a implementao de algumas classes necessriaspara a separao do sistemas em camadas (Modelo Model, Viso View , Controlador Controller). A primeira delas que mostrarei, a de controlador genrico, no diretamente ligado sregras de negcio do sistema de Agenda Telefnica. Veja o exemplo abaixo.
http://en.wikipedia.org/wiki/SQLitehttp://www.digitaldev.com.br/wp-content/uploads/2012/11/Captura-de-Tela-2012-11-16-as-13.51.08.png -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
3/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 3/33
Conforme vocs devem ter visto acima, usei o sufixo Controllerno nome da classee Actionno nomedo mtodo. Esse o padro de nomenclatura que irei utilizar em todas as outras classes da camadaControle e seus mtodos. Alm disso, nomearei os arquivos que iro conter as classes com o mesmonome da prpria classe.
A segunda classe que implementarei ser a Application. A responsabilidade da mesma ser a deverificar qual classe da camada de controle (Controller) e qual mtodo da classe (Action) o usuriodeseja executar. D uma olhada no cdigo abaixo, espero que ele seja simples o suficiente paraesclarecer seu modo de funcionamento.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
4/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 4/33
throw new Exception("Classe '$st_class' nao existe no arquivo '$st_controller_file'");
//verificando se o metodo existe $st_method = $this->st_action.'Action'; if(method_exists($o_class,$st_method)) $o_class->$st_method(); else throw new Exception("Metodo '$st_method' nao existe na classe $st_class'"); }
/** * Redireciona a chamada http para outra pgina * @param string $st_uri */
static function redirect( $st_uri ) { header("Location: $st_uri"); }}?>
Apesar da classe acima no ter semelhana alguma com a classe IndexControllerque escrevi, elatambm faz parte da camada de controle (Controller), mas est num nvel mais acima. O fato dela serresponsvel por verificar qual controlador (Controller) e qual mtodo (Action) ir executar, faz damesma o corao do sistema.
A terceira classe que irei implementar ser responsvel por cuidar dacamada de visualizao. Apesarde cdigo um pouco extenso, ela uma classe sem muitas funcionalidade, mas poder ser enriquecidade acordo com nossas necessidades futuras.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
5/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 5/33
return $this->st_view; }
/** * Define os dados que devem ser repassados view * @param Array $v_params */ public function setParams(Array $v_params) { $this->v_params = $v_params;
}
/** * Retorna os dados que foram ser repassados ao arquivo de visualizao
* @return Array */ public function getParams() { return $this->v_params; }
/** * Retorna uma string contendo todo
* o conteudo do arquivo de visualizao *
* @return string */ public function getContents() { ob_start(); if(isset($this->st_view)) require_once $this->st_view; $this->st_contents = ob_get_contents();
ob_end_clean(); return $this->st_contents;
}
/** * Imprime o arquivo de visualizao
*/ public function showContents() { echo $this->getContents(); exit; }}?>
Os dados de algumas classes da camada de modelodeveropersistirno banco de dados, para isso,ser necessrio a implementao de pequeno bloco de cdigo responsvel pela conexo entre o sistemae o SGDB. A alternativa que adotarei ser a de implementar uma classe abstrata, que dever ser
herdada pelas classes em que os dados devero ser armazenados no banco de dados. Veja cdigo daclasse abstrata a seguir.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
6/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 6/33
$st_senha ); //Fim de conexo com MySQL */
}}?>
Conforme Vocs j devem ter visto, a classe PersistModelAbstractfaz referncia ao arquivo db.sq3dentro do diretrio databases, esse arquivo ser o responsvel por guardar nossos dados. Irei mostrarisso na prtica com o continuar desse artigo.
Implementarei tambm, duas outras pequenas classes, a primeira ser usada para filtrar os dados
passados via POSTe GETe a segunda ser usada para validar os dados. Irei cham-las deDataFiltere DataValidator, respectivamente.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
7/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 7/33
*/ static function isNumeric( $mx_value ) { $mx_value = str_replace(',', '.', $mx_value); if(!(is_numeric($mx_value))) return false; return true; }
/** * Verifica se o dado passado e um numero inteiro * @param mixed $mx_value; * @return boolean */
static function isInteger( $mx_value ) { if(!DataValidator::isNumeric($mx_value)) return false;
if(preg_match('/[[:punct:]&^-]/', $mx_value) > 0) return false; return true; }}?>
Por fim, irei implementar o cdigo do arquivo index.php, o mesmo ser extremamente simples. Vejaabaixo.
Nesse estgio de desenvolvimento, a hierarquia de diretrios e arquivos deve se dar como a Imagem 2mostrada abaixo.
Imagem 2 Hierarquia de Diretrios e Pastas
A Camada de Negcios
Agora, com as classes do sistema implementadas, irei finalmente me preocupar com as regras denegcio da Agenda Telefnica. Veja a documentao abaixo.
Lista de requisitos
Permitir ao usurio visualizar a lista de contatos na tela principal do sistema.Permitir ao usurio administrar o cadastro de contatos.Permitir ao usurio, selecionar o contato e visualizar os telefones do mesmo.Permitir ao usurio administrar o cadastro de telefones do contato selecionado.
Permitir ao usurio cadastrar n telefones para o contato selecionado.
Diagrama de Casos de Uso
http://www.digitaldev.com.br/wp-content/uploads/2012/11/Captura-de-Tela-2012-11-16-as-14.54.45.png -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
8/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 8/33
Imagem 3 Diagrama de Casos de Uso
Diagrama de Classe
Nesse diagrama, apenas documentarei as classes diretamente ligadas ao sistema de Agenda Telefnica,a diagramao das classes que implementei acima no ser abordada.
Imagem 4 Diagrama de Classes
Diagrama de Entidade Relacionamento
Pelo fato da necessidade da persistir os dados de contato e dos telefones, ser necessrio duas tabelaspara guardar os dados das classes. Veja o Diagrama de Entidade Relacionamento (DER) abaixo.
Imagem 5 Diagrama de Entidade Relacionamento
Agora que j tenho a arquitetura da camada de negcio j definida, o proximo passo implementar asclasses responsveis por gerenciar as mesmas. Isso mesmo, estou me referendo s classes Contato eTelefone, e como eu j havia falado, os dados das mesmas devem persistir no banco de dados, poresse motivo, elas devem herdar a classe PersistModelAbstract.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
9/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 9/33
* @author DigitalDev* @version 0.1.1** Camada - Modelo ou Model.* Diretrio Pai - models* Arquivo - ContatoModel.php**/class ContatoModel extends PersistModelAbstract{ private $in_id; private $st_nome; private $st_email;
function __construct()
{ parent::__construct(); //executa mtodo de criao da tabela de Telefone $this->createTableContato(); }
/** * Setters e Getters da * classe ContatoModel */
public function setId( $in_id ) { $this->in_id = $in_id; return $this; }
public function getId()
{ return $this->in_id; }
public function setNome( $st_nome ) { $this->st_nome = $st_nome; return $this; }
public function getNome() { return $this->st_nome; }
public function setEmail( $st_email ) { $this->st_email = $st_email; return $this; }
public function getEmail() { return $this->st_email; }
/** * Retorna um array contendo os contatos * @param string $st_nome * @return Array */ public function _list( $st_nome = null ) { if(!is_null($st_nome)) $st_query = "SELECT * FROM tbl_contato WHERE con_st_nome LIKE '%$st_nome%';"; else $st_query = 'SELECT * FROM tbl_contato;';
$v_contatos = array(); try { $o_data = $this->o_db->query($st_query); while($o_ret = $o_data->fetchObject()) { $o_contato = new ContatoModel(); $o_contato->setId($o_ret->con_in_id); $o_contato->setNome($o_ret->con_st_nome); $o_contato->setEmail($o_ret->con_st_email); array_push($v_contatos, $o_contato); } } catch(PDOException $e) {}
return $v_contatos; }
/** * Retorna os dados de um contato referente * a um determinado Id * @param integer $in_id * @return ContatoModel */ public function loadById( $in_id ) {
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
10/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 10/33
$v_contatos = array(); $st_query = "SELECT * FROM tbl_contato WHERE con_in_id = $in_id;"; $o_data = $this->o_db->query($st_query); $o_ret = $o_data->fetchObject(); $this->setId($o_ret->con_in_id); $this->setNome($o_ret->con_st_nome); $this->setEmail($o_ret->con_st_email);
return $this; }
/** * Salva dados contidos na instancia da classe * na tabela de contato. Se o ID for passado, * um UPDATE ser executado, caso contrrio, um
* INSERT ser executado * @throws PDOException * @return integer */ public function save() { if(is_null($this->in_id)) $st_query = "INSERT INTO tbl_contato ( con_st_nome, con_st_email ) VALUES ( '$this->st_nome', '$this->st_email' );"; else $st_query = "UPDATE
tbl_contato SET con_st_nome = '$this->st_nome', con_st_email = '$this->st_email' WHERE con_in_id = $this->in_id"; try {
if($this->o_db->exec($st_query) > 0) if(is_null($this->in_id)) { /* * verificando se o driver usado sqlite e pegando o ultimo id inserido * por algum motivo, a funo nativa do PDO::lastInsertId() no funciona com sqlite */ if($this->o_db->getAttribute(PDO::ATTR_DRIVER_NAME) === 'sqlite') { $o_ret = $this->o_db->query('SELECT last_insert_rowid() AS con_in_id')->fetchObject(); return $o_ret->con_in_id; } else return $this->o_db->lastInsertId(); } else return $this->in_id; } catch (PDOException $e) { throw $e; } return false;
}
/** * Deleta os dados persistidos na tabela de * contato usando como referencia, o id da classe.
*/ public function delete() { if(!is_null($this->in_id)) { $st_query = "DELETE FROM tbl_contato WHERE con_in_id = $this->in_id"; if($this->o_db->exec($st_query) > 0) return true; } return false; }
/** * Cria tabela para armazernar os dados de contato, caso * ela ainda no exista. * @throws PDOException */
private function createTableContato() { /* * No caso do Sqlite, o AUTO_INCREMENT automtico na chave primaria da tabela * No caso do MySQL, o AUTO_INCREMENT deve ser especificado na criao do campo */ if($this->o_db->getAttribute(PDO::ATTR_DRIVER_NAME) === 'sqlite') $st_auto_increment = '';
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
11/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 11/33
else $st_auto_increment = 'AUTO_INCREMENT';
$st_query = "CREATE TABLE IF NOT EXISTS tbl_contato ( con_in_id INTEGER NOT NULL $st_auto_increment, con_st_nome CHAR(200), con_st_email CHAR(100), PRIMARY KEY(con_in_id) )";
//executando a query; try {
$this->o_db->exec($st_query); } catch(PDOException $e) { throw $e; }
}}?>
Agora a vez da classe TelefoneModelser implementada.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
12/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 12/33
}
public function getContatoId() { return $this->in_contato_id; }
/** * Retorna um array contendo os telefones * de um determinado contato * @param integer $in_contato_id * @return Array */
public function _list( $in_contato_id ) { $st_query = "SELECT * FROM tbl_telefone WHERE con_in_id = $in_contato_id"; $v_telefones = array(); try { $o_data = $this->o_db->query($st_query); while($o_ret = $o_data->fetchObject()) { $o_telefone = new TelefoneModel(); $o_telefone->setId($o_ret->tel_in_id); $o_telefone->setDDD($o_ret->tel_in_ddd); $o_telefone->setTelefone($o_ret->tel_in_telefone); $o_telefone->setContatoId($o_ret->con_in_id); array_push($v_telefones,$o_telefone); } } catch(PDOException $e) {}
return $v_telefones; }
/** * Retorna os dados de um telefone referente * a um determinado Id * @param integer $in_id * @return TelefoneModel */ public function loadById( $in_id ) { $v_contatos = array(); $st_query = "SELECT * FROM tbl_telefone WHERE tel_in_id = $in_id;"; try { $o_data = $this->o_db->query($st_query); $o_ret = $o_data->fetchObject(); $this->setId($o_ret->tel_in_id); $this->setDDD($o_ret->tel_in_ddd); $this->setTelefone($o_ret->tel_in_telefone); $this->setContatoId($o_ret->con_in_id); return $this; } catch(PDOException $e) {} return false;
}
/** * Salva dados contidos na instancia da classe * na tabela de telefone. Se o ID for passado, * um UPDATE ser executado, caso contrrio, um * INSERT ser executado * @throws PDOException * @return integer */ public function save()
{ if(is_null($this->in_id)) $st_query = "INSERT INTO tbl_telefone ( con_in_id, tel_in_ddd, tel_in_telefone ) VALUES ( $this->in_contato_id, '$this->in_ddd', '$this->in_telefone' );"; else $st_query = "UPDATE tbl_telefone SET tel_in_ddd = '$this->in_ddd',
tel_in_telefone = '$this->in_telefone' WHERE tel_in_id = $this->in_id"; try {
if($this->o_db->exec($st_query) > 0) if(is_null($this->in_id))
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
13/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 13/33
{ /* * verificando se o driver usado sqlite e pegando o ultimo id inserido * por algum motivo, a funo nativa do PDO::lastInsertId() no funciona com sqlite */ if($this->o_db->getAttribute(PDO::ATTR_DRIVER_NAME) === 'sqlite') { $o_ret = $this->o_db->query('SELECT last_insert_rowid() AS tel_in_id')->fetchObject(); return $o_ret->tel_in_id; } else return $this->o_db->lastInsertId(); } else
return $this->in_id; } catch (PDOException $e) { throw $e; } return false;
}
/** * Deleta os dados persistidos na tabela de * telefone usando como referencia, o id da classe. */ public function delete() { if(!is_null($this->in_id)) { $st_query = "DELETE FROM tbl_telefone
WHERE tel_in_id = $this->in_id"; if($this->o_db->exec($st_query) > 0) return true; } return false; }
/** * Cria tabela para armazernar os dados de telefone, caso * ela ainda no exista. * @throws PDOException */ private function createTableTelefone() { /* * No caso do Sqlite, o AUTO_INCREMENT automtico na chave primaria da tabela * No caso do MySQL, o AUTO_INCREMENT deve ser especificado na criao do campo */ if($this->o_db->getAttribute(PDO::ATTR_DRIVER_NAME) === 'sqlite') $st_auto_increment = ''; else $st_auto_increment = 'AUTO_INCREMENT';
$st_query = "CREATE TABLE IF NOT EXISTS tbl_telefone ( tel_in_id INTEGER NOT NULL $st_auto_increment, con_in_id INTEGER NOT NULL, tel_in_ddd CHAR(5), tel_in_telefone CHAR(12), PRIMARY KEY(tel_in_id) )";
//executando a query; try
{ $this->o_db->exec($st_query); } catch(PDOException $e) { throw $e; }
}}?>
Depois das classes da camada de modelo implementadas, o prximo passo escrever o cdigo dasclasses de controle referente ao fluxo de gerenciamento das classes acima. Elas tambm sero duas,ContatoControllere TelefoneController.
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
14/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 14/33
* Camada - Controladores ou Controllers* Diretrio Pai - controllers* Arquivo - ContatoController.php**/class ContatoController{ /** * Efetua a manipulao dos modelos necessrios * para a aprensentao da lista de contatos */ public function listarContatoAction() { $o_Contato = new ContatoModel();
//Listando os contatos cadastrados $v_contatos = $o_Contato->_list();
//definindo qual o arquivo HTML que ser usado para //mostrar a lista de contatos $o_view = new View('views/listarContatos.phtml');
//Passando os dados do contato para a View $o_view->setParams(array('v_contatos' => $v_contatos));
//Imprimindo cdigo HTML $o_view->showContents(); }
/** * Gerencia a requisies de criao * e edio dos contatos
*/ public function manterContatoAction() { $o_contato = new ContatoModel();
//verificando se o id do contato foi passado if( isset($_REQUEST['in_con']) ) //verificando se o id passado valido if( DataValidator::isNumeric($_REQUEST['in_con']) ) //buscando dados do contato $o_contato->loadById($_REQUEST['in_con']);
if(count($_POST) > 0) { $o_contato->setNome(DataFilter::cleanString($_POST['st_nome'])); $o_contato->setEmail(DataFilter::cleanString($_POST['st_email']));
//salvando dados e redirecionando para a lista de contatos if($o_contato->save() > 0) Application::redirect('?controle=Contato&acao=listarContato'); }
$o_view = new View('views/manterContato.phtml'); $o_view->setParams(array('o_contato' => $o_contato)); $o_view->showContents(); }
/** * Gerencia a requisies de excluso dos contatos */ public function apagarContatoAction() { if( DataValidator::isNumeric($_GET['in_con']) ) { //apagando o contato $o_contato = new ContatoModel(); $o_contato->loadById($_GET['in_con']);
$o_contato->delete();
//Apagando os telefones do contato $o_telefone = new TelefoneModel(); $v_telefone = $o_telefone->_list($_GET['in_con']); foreach($v_telefone AS $o_telefone) $o_telefone->delete(); Application::redirect('?controle=Contato&acao=listarContato'); }
}}?>
e por sua vez a classe TelefoneController
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
15/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 15/33
** Camada - Controladores ou Controllers* Diretrio Pai - controllers* Arquivo - TelefoneController.php*/class TelefoneController{
/** * Efetua a manipulao dos modelos necessrios * para a aprensentao da lista de telefones do contato */ public function listarTelefonesAction() {
if( isset($_REQUEST['in_con']) ) if( DataValidator::isNumeric($_REQUEST['in_con']) ) { $o_contato = new ContatoModel(); $o_contato->loadById($_REQUEST['in_con']);
$o_telefone = new TelefoneModel(); $v_telefones = $o_telefone->_list($_GET['in_con']); $o_view = new View('views/listarTelefones.phtml'); $o_view->setParams(array('o_contato' => $o_contato,'v_telefones' => $v_telefones)); $o_view->showContents(); } }
/** * Gerencia a requisies de criao * e edio dos telefones do contato
*/ public function manterTelefoneAction()
{ $o_contato = new ContatoModel(); $o_telefone = new TelefoneModel();
if( isset($_REQUEST['in_con']) ) if( DataValidator::isInteger($_REQUEST['in_con']) ) $o_contato->loadById($_REQUEST['in_con']);
if( isset($_REQUEST['in_tel']) ) if( DataValidator::isInteger($_REQUEST['in_tel']) ) $o_telefone->loadById($_REQUEST['in_tel']);
if(count($_POST) > 0) { $o_telefone->setDDD(DataFilter::numeric($_POST['in_ddd'])); $o_telefone->setTelefone(DataFilter::numeric($_POST['in_telefone'])); $o_telefone->setContatoId($o_contato->getId()); if($o_telefone->save() > 0) Application::redirect('?controle=Telefone&acao=listarTelefones&in_con='.$o_contato->getId()); }
$o_view = new View('views/manterTelefone.phtml'); $o_view->setParams(array('o_contato' => $o_contato,'o_telefone' => $o_telefone)); $o_view->showContents(); }
/** * Gerencia a requisies de excluso de telefones do contato */ public function apagarTelefoneAction() { if( isset($_GET['in_tel']) ) if( DataValidator::isInteger($_GET['in_tel'])) { $o_telefone = new TelefoneModel(); $o_telefone->loadById($_GET['in_tel']); $o_telefone->delete();
Application::redirect('?controle=Telefone&acao=listarTelefones&in_con='.$_GET['in_con']); }
}}?>
Arquivos de visualizao ou views
As classes implementadas acima esto fazendo referncia arquivos HTML contidos na camada devisualizao, para esse programa funcionar, ser preciso implement-los. Isso o que irei fazer agora.
Arquivo listarContatos.phtmlDiretrio Pai views
Agenda Telefnica - Exemplo de MVC com PHP
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
16/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 16/33
ID Nome E-mail
Aes
Novo ContatoArquivo listarTelefones.phtmlDiretrio Pai views
Agenda Telenica - Exemplo de MVC com PHP Contato ID Nome E-mail
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
17/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 17/33
Telefones IDDDD Telefone Aes
&in_tel=
Voltar Agenda Telefnica - Exemplo de MVC com PHP Nome E-mail Aes -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
18/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 18/33
Agenda Telefnica - Exemplo de MVC com PHP Contato ID Nome E-mail
Telefones DDD Telefone Aes -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
19/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 19/33
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
20/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 20/33
$st_dsn = "mysql:host=$st_host;dbname=$st_banco";$this->o_db = new PDO
( $st_dsn, $st_usuario, $st_senha ); //Fim de conexo com MySQL }}?>
Mais sobre MVC com PHPH um tempo atrs, encontrei um material em vdeo muito bom sobre como montar um Mini-Frameworkno padro MVC com PHP. Para acessar esse videos, clique em Criando um Mini Framework PHP 5com MVC
Mais sobre Padres de Projeto
O MVC um dos Padres de Projetos mais importantes hoje em dia, mas no est sozinho. Existemvrios outros padres por ai, eles nos ajudam a organizar o cdigo, resolver problemas que costumamosenfrentar no dia-dia da Programao Orientada a Objeto. Sendo assim, vale muito a pena estudar sobreeles, pois um bom programador no aquele que apenas codifica solues excepcionais, mas tambm oque consegue organizar com clareza seu cdigo. Veja uma lista de alguns padres organizados por suascategorias abaixo, j um pontap inicial para se estudar. Espero ter ajudado.
Padres de criao
Abstract Factory, Builder, Factory Method, Prototype, Singleton
Padres estruturais
Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
Padres comportamentais
Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy,Template Method, Visitor
Tags: Abstract Factory, Adapter, Bridge, Builder, Chain of Responsibility, Command, Composite,Decorator, design patterns, Exemplos, Facade, Factory Method, Flyweight, Interpreter, Iterator,Mediator, Memento, MVC, Observer, Padres de Projeto, Prototype, Proxy, Singleton, State,Strategy, Template Method, Visitor
Sobre o autor
Tarcsio
Bacharel em Engenharia da Computao, programador C / C++ , especialista em PHP, MySQL,PostgreSQL.
59 comentrios
1 meno
Talvez voc tambm goste de ler sobre
Classe,
encapsulamento,
herana, composio
e agregao
Entendendo o MV C
(Model-View-
Controller)
Intercalando cores
entre linhas de uma
tabela ou lista
usando CSS3
c e b o o k 5 3 i t t e r 7 o g l e t e r e s t
http://www.digitaldev.com.br/2012/01/27/intercalando-cores-entre-linhas-de-uma-tabela-ou-lista-usando-css3/http://www.digitaldev.com.br/2013/01/18/entendendo-o-mvc-model-view-controller/http://www.digitaldev.com.br/2011/09/27/classe-encapsulamento-heranca-composicao-e-agregacao/http://www.digitaldev.com.br/tag/visitor/http://www.digitaldev.com.br/tag/template-method/http://www.digitaldev.com.br/tag/strategy/http://www.digitaldev.com.br/tag/state/http://www.digitaldev.com.br/tag/singleton/http://www.digitaldev.com.br/tag/proxy/http://www.digitaldev.com.br/tag/prototype/http://www.digitaldev.com.br/tag/padroes-de-projeto/http://www.digitaldev.com.br/tag/observer/http://www.digitaldev.com.br/tag/mvc/http://www.digitaldev.com.br/tag/memento/http://www.digitaldev.com.br/tag/mediator/http://www.digitaldev.com.br/tag/iterator/http://www.digitaldev.com.br/tag/interpreter/http://www.digitaldev.com.br/tag/flyweight/http://www.digitaldev.com.br/tag/factory-method/http://www.digitaldev.com.br/tag/facade/http://www.digitaldev.com.br/tag/exemplos/http://www.digitaldev.com.br/tag/design-patterns/http://www.digitaldev.com.br/tag/decorator/http://www.digitaldev.com.br/tag/composite/http://www.digitaldev.com.br/tag/command/http://www.digitaldev.com.br/tag/chain-of-responsibility/http://www.digitaldev.com.br/tag/builder/http://www.digitaldev.com.br/tag/bridge/http://www.digitaldev.com.br/tag/adapter/http://www.digitaldev.com.br/tag/abstract-factory/http://www.videoaulasbrasil.com.br/tag/criando-um-mini-framework-PHP-5-com-MVC/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?share=pinterest&nb=1http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?share=google-plus-1&nb=1http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?share=twitter&nb=1http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?share=facebook&nb=1 -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
21/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 21/33
Pular para o formulrio de comentrio
1.
Isaac Sampaio
25 de janeiro de 2013 em 0:45 (UTC -3)
Responder
Parabns amigo!! Muito bom
artigo!! nota 1000.
2.
Jorge Sampaio
4 de fevereiro de 2013 em 12:58 (UTC -3)
Responder
Cara!!!! Muito bom mesmo sua abordagem. Estou criando um aplicativo, porm, o cdigo j estmuito bagunado e de difcil assimilao, estou comeando a perder o controle do mesmo.Observando a forma com que vc lidou com seu exemplo, hummmm, fique mais entusiasmado emrefazer o meu apoiado em sua tima explicao. Fico alegre por vc compartilhar seu
conhecimento a favor de outros. Novamente, muito obrigado e at.
1.
Tarcsio
4 de fevereiro de 2013 em 13:31 (UTC -3)
Responder
Obrigado Jorge. Se tiver alguma dvida, entre em contato que eu tentarei ajudar.
2.
Eduardo
2 de dezembro de 2013 em 9:38 (UTC -3)
Responder
Fao das palavras do Jorge Sampaio as minhas. Obrigado por compartilhar tal informaoque, muitos dos que esto comeando OOP tem muita dificuldade.
3.
Jack Makiya ma
10 de maro de 2013 em 21:18 (UTC -3)
Responder
Ol Tarcsio obrigado pelo belo material publicado, parabns, foi muito esclarecedor edidtico.
Nunca trabalhei com phpoo(tirando os web services) nem mvc, mas tenho uma noo. Masmesmo depois de ler sua publicao e varias outras que j li, no consigo visualizar eutrabalhando com mvc. Talvez por falta de conhecimento, ou falta daquele estalo que da na nossamente pra cair a fixa. Mesmo conseguindo compreender o que foi proposto. =/.
Estou nessa busca de conseguir entender o suficiente pra mudar minha rotina de trabalho sem quecaia a produo. Mas talvez, s usando mesmo pra sacar a ideia.
Teria algo referente a isso pra me dizer/recomendar?
Mais uma vez, parabns pelo material e obrigado por compartilhar.o/
4.
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=733#respondhttp://www.facebook.com/j4ck3ds0nhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=903#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=706#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=705#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=701#respond -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
22/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 22/33
cassioroxssio
4 de abril de 2013 em 12:45 (UTC -3)
Responder
Parabns, empaquei no meu projeto, acredito que o estudo desse cdigo ir me auxiliar!
5.
cassiorox
4 de abril de 2013 em 12:51 (UTC -3)
Responder
Como tenho MySql e no SQLlite, no consegui rodar aqui :SVou tentar colocar no MySQL
1.
Tarcsio
18 de julho de 2013 em 15:02 (UTC -3)
Responder
Boa tarde Cassio, eu revisei o cdigo e alterei o mesmo para possibilitar tanto a conexocom MySQL, quanto com SQLite. Se houver mais alguma dvida, entre em contato.
6.
Amarildo Lucas
7 de abril de 2013 em 13:13 (UTC -3)
Responder
Ol Tarcsio,Tentei refazer o seu exemplo igualzinho mas usando mysql, no me ocorre erro algum, mas aocorrer o projecto (http://localhost:8888/mvcExemplo/?controle=Usuario&acao=listarUsuario) obrowser fica todo em branco, como se no ocorresse nada. Ainda acredito que o erro est naforma como lidei para tratar os dados com mysql. Pode me ajudar com esta dvida? Comoestaria a minha classe PersistModelAbstract.php usando mysql?
1.
Amarildo Lucas
11 de abril de 2013 em 8:56 (UTC -3)
Responder
Ok! J consegui resolver. Obrigado!
1.
leandrofb
15 de abril de 2013 em 21:44 (UTC -3)
Responder
Fala Amarildo to tentando usar o MySQL tb e aparece o mxm erro como vccorrigiu ? vlw
1.
leandrofb
15 de abril de 2013 em 21:56 (UTC -3)
Responder
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=750#respondhttp://gravatar.com/leandrofbhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=749#respondhttp://gravatar.com/leandrofbhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=746#respondhttp://gravatar.com/rasinchttp://localhost:8888/mvcExemplo/?controle=Usuario&acao=listarUsuariohttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=745#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=821#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=743#respondhttp://gravatar.com/cassioroxhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=742#respondhttp://gravatar.com/cassiorox -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
23/33
-
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
24/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 24/33
1.
Tarcsio
16 de abril de 2013 em 17:48 (UTC -3)
Responder
No ta mostrando mensagem de erro alguma leandro? Voc consegue fazer selects ou tquebrando tudo?
2.
Tarcsio
18 de julho de 2013 em 15:07 (UTC -3)
Responder
Boa tarde Leandro.Revisei e alterei o cdigo, agora ele se conecta tanto com MySQL quanto com SQLite.Se houver mais alguma dvida, entre em contato
9.
Leonardo
29 de abril de 2013 em 21:25 (UTC -3)
Responder
Cara. Show de bola a sua explicao. A melhor e mais clara que achei na net. Parabns.
10.
Victhor
9 de maio de 2013 em 17:30 (UTC -3)
Responder
Parabens , otimo post, conseg converte para outro banco de dados de uma forma extremamentesimples, show de boa
11.
leandrofb
16 de maio de 2013 em 22:48 (UTC -3)
Responder
Para mim aparece o seguinte erro qd eu aponto para o mysql:
Erro no servidorO site encontrou um erro ao recuperar http://www.polesystem.com.br/mvc/?controle=Telefone&acao=manterTelefone&in_con=0. Ele pode estar em manuteno ouconfigurado incorretamente.Veja algumas sugestes:Recarregue esta pgina da web mais tarde.Erro HTTP {500 (Internal Server Error): Ocorreu uma condio inesperada enquanto o servidortentava completar a solicitao.
Pode acessar a o link para ver tb:http://www.polesystem.com.br/mvc
o que eu mudei do arquivos foi somente a function no arquivo PersistModelAbstract.php para :
function __construct(){
$mysql = host;$username = user;$passwd = senha;$sqlite = sqlite:./databases/db.sq3;
http://www.polesystem.com.br/mvchttp://www.polesystem.com.br/mvc/?controle=Telefone&acao=manterTelefone&in_con=0http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=774#respondhttp://gravatar.com/leandrofbhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=772#respondhttp://www.excelent.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=766#respondhttp://gravatar.com/leogrillo185http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=824#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=756#respondhttp://digitaldev.com.br/ -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
25/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 25/33
try{
//Conectando ao banco de dados
//$this->o_db = new PDO($sqlite);//$this->o_db->setAttribute ( PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION );
$this->o_db = new PDO($mysql, $username, $passwd) or print (mysql_error());$this->o_db->setAttribute ( PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e) {echo $e->getMessage();
}}
e mudei tb no arquivo Application.php a function loadRoute() onde estava index para Index pq no abria a pagina principal.
12.
Edson
17 de maio de 2013 em 15:17 (UTC -3)
Responder
Ola, bom artigo,muito esclarecedor. Sou novado em OO e baixei os arquivos e na hora deexecutar, quando rodo a pagina index.php estou com o seguinte erro:Uncaught exception Exception with message Arquivo controllers/indexController.php naoencontrado in /home/u810533697/public_html/mvc/lib/Application.php:75 Stack trace: #0/home/u810533697/public_html/mvc/index.php(7): Application->dispatch() #1 {main} thrown in/home/u810533697/public_html/mvc/lib/Application.php on line 75Algum aqui teve esse problema?Grato
1.
Tarcsio
18 de julho de 2013 em 15:10 (UTC -3)
Responder
Edson, o cdigo foi revisado e o bug foi corrigido. Alem disso, adicionei algumasalteraes que permitem conectar a aplicao tanto com MySQL quanto com SQLite. Seachar mais alguma coisa errada ai, entre em contato. Obrigado
13.
zegildo
1 de junho de 2013 em 19:41 (UTC -3)
Responder
Oi, parabns pelo artigo! Apena uma dvida *Model no deveria chamar *DB e a calsseDataBase realizar as operaes no banco? Ento no *Model eu poderia ter o conceito detransao interessante para algumas aplicaes. O que voc acha?
1.
Tarcsio
3 de junho de 2013 em 9:42 (UTC -3)
Responder
Bom dia Zegildo.
Tentei usar classes mais simples para demonstrar o funcionamento, evitando assim a divisoda Camada Model em mais Subcamadas. Mas, conforme a experincia do programador, vlido a diviso da camada de Model em vrias outras. Eu geralmente costumo criarclasses com sufixo DAO(Data Access Object), onde as mesmas so responsveis pelapersistncia dos dados das classes com sufixo Entity(Entidades como contato, telefone,endereo).
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=778#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=777#respondhttp://about.me/zegildohttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=826#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=776#respond -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
26/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 26/33
14.
Srgio Novelli
7 de junho de 2013 em 14:33 (UTC -3)
Responder
Tarcsio, primeiramente, parabns pelo cdigo.
Estou tentando rodar esse cdigo, mas estou tendo o seguinte erro:
Fatal error: Class PersistModelAbstract not found inD:\wamp\www\maisumteste\models\TelefoneModel.php on line 15
O fato que no consegue encontrar a classe PersistModelAbstract, porm ela existe. A nicaalterao realizada foi fazer a conexo com mysql:
abstract class PersistModelAbstract {
protected $o_db;
function __construct() {
try{$this->o_db = new PDO(mysql:host=localhost;dbname=testemvc, root, ,array(PDO::ATTR_PERSISTENT => true)) or print (mysql_error());$this->o_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );}catch (PDOException $e) {echo $e->getMessage();}}
}
Poderia me dar uma dica do que est acontecendo? O uso da classe PDO est correto?
Obrigado.
1.
Tarcsio
18 de junho de 2013 em 13:40 (UTC -3)
Responder
Vou testar o cdigo com o mysql e te dou retorno.
2.
Tarcsio
18 de julho de 2013 em 15:04 (UTC -3)
ResponderSergio, eu retestei e revisei o cdigo para corrigir alguns pequenos erros. Esse errorelatado por voc foi corrigido. Obrigado.
15.
Roberto
18 de junho de 2013 em 0:03 (UTC -3)
Responder
Boa noite Tarcsio, fico no aguardo do cdigo repetido. (TelefoneController) Tentei fazer masno consegui muito sucesso. Abraos e valeu pelo grande post!
1.
Tarcsio
http://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=791#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=822#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=795#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=783#respond -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
27/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 27/33
18 de julho de 2013 em 15:09 (UTC -3)
Responder
Roberto, revisei o cdigo e alterei o post. Agora a classe est no seu devido lugar.Se achar mais alguma inconsistncia, entre em contato.
16.
Francis Rodrigues
18 de junho de 2013 em 10:26 (UTC -3)
Responder
Gostei muito da estrutura MVC que voc desenvolveu.Tem algo em mente pra colocar .htaccess nisso pra deixar com query string e url amigveltambm?
Esse mtodo de jogar instrues SQL tambm no gostei, mas no sei uma forma de usar metaqueries como o CakePHP faz. Alguma idia?
1.
Tarcsio
18 de junho de 2013 em 13:35 (UTC -3)
Responder
Esse cdigo um exemplo focado em MVCapenas para que programadores iniciantesentendam como funciona a estrutura. No um projeto de um framework ou algo do tipo.O SQL no meio do Model apenas para diminuir o nmero de classes e divises dacamada de Modelo, mantendo assim, o foco no entendimento do MVC. Por esse motivo,no implementei url amigvel.
1.
Francis Rodrigues
28 de junho de 2013 em 23:44 (UTC -3)
Responder
Tarcsio programadores iniciantes?Essa foi boa hahaha.
Sua estrutura est at melhor que a de muitos frameworks de ponta que diversascomunidades os usam.
Precisamos criar um parse no html como templates, para evitar usar tanto php juntocom o html, criar rotas de url e deixando as urls amigvels ou no, como owordpress e joomla tem, acesso a url com query string ou com modo rewrite tudoativo.
Estou interessado em continuar essa estrutura em projeto, quem sabe no criamosuma estrutura em que muitos podero seguir.
Se estiver interessado, entre em contato.Abrao.
1.
Tarcsio
30 de junho de 2013 em 12:46 (UTC -3)
Responder
Quando digo Iniciantes, quero dizer que tentei deixar a explicao mais clarapossvel, sem ir muito alem nas estruturas. Porque se eu deixasse o modelocompleto, do jeito que eu trabalho, ficaria mais difcil pro pessoal entender.
1.
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=801#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=800#respondhttp://tosystems.net/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=793#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=792#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=825#respond -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
28/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 28/33
Francis Rodrigues
1 de julho de 2013 em 9:51 (UTC -3)
Entendi.Mas podemos subir isso num repositrio como projeto.Considerando depois como uma arquitetura MVC open de sua autoria.
2.
Granhani
29 de outubro de 2013 em 4:36 (UTC -3)
Responder
Tarcsio show de bola seu post!! parabns mesmo!!!a questo foi que tive a mesma ideia do Francis Rodriguese dei uma fuada no seu cdigo!!!
adicionei o .htaccess pra gerenciar as url amigvel, e algumas outras mudanas pra issofuncionar!!!
se o Francis Rodrigues ainda nao fez essas mudanassegue o link para download
https://copy.com/OBL46UmwxyIC
17.
Ernando A. Mendes
30 de junho de 2013 em 13:11 (UTC -3)
Responder
Fala Tarcsio, tudo bem? Muito bom esse material, tudo bem comentado, timo para mim quesou iniciante em MVC.
18.
Francis Rodrigues
1 de julho de 2013 em 9:48 (UTC -3)
Responder
Tem um erro aqui:
Fatal error: Class PersistModelAbstract not found in/home/ubuntu/projeto/models/TelefoneModel.php on line 16
1.
Tarcsio
1 de julho de 2013 em 10:32 (UTC -3)
Responder
Vou verificar
1.
Francis Rodrigues
1 de julho de 2013 em 20:58 (UTC -3)
Responder
que faltou incluir require_once(lib/PersistModelAbstract.php);
e View.php tambm.
Vai dar um monte de erro seguindo o exemplo.
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=808#respondhttp://tosystems.net/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=807#respondhttp://digitaldev.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=805#respondhttp://tosystems.net/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=804#respondhttps://copy.com/OBL46UmwxyIChttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=873#respondhttp://tosystems.net/ -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
29/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 29/33
Vou ver se no cdigo do download est tudo normal.
2.
Tarcsio
18 de julho de 2013 em 15:16 (UTC -3)
Responder
Francis, o post foi corrigido
Foi adicionado uma funo __autoload no arquivo Application.php, com ela todas asclasses da pasta lib sero automaticamente carregadas, inclusive essa em questo.
Obrigado pela observao.
19.
Cristiano Moura
18 de julho de 2013 em 7:29 (UTC -3)
Responder
Parabns pelo artigo, est perfeito!
20.
Fabiana Moura
2 de outubro de 2013 em 2:04 (UTC -3)
Responder
Curti muito sua explicao!
21.
Riguel
27 de outubro de 2013 em 21:48 (UTC -3)
Responder
Tarcisio
Cara sou iniciante e estou com uma duvida pois estou utilizando o seu projeto para estudocontudo no estou conseguindo passar os valores dos campos e resgatalos no lado do server dum erro dizendo que no existe, estou utilizando $POST['xxx'] teria como me dar uma fora oume explicar como realmente funciona o set e get params?? obrigado e realmente muito bom oprojeto
22.
Augusto
28 de outubro de 2013 em 14:28 (UTC -3)
Responder
Gostei muito do artigo!!! gostaria de saber como implementar autenticao usando esse modelomvc?
23.
Dominus Farib
31 de outubro de 2013 em 0:00 (UTC -3)
Responder
Muito bom mesmo, parabns!So de posts assim que muitos programadores PHP estruturais no Brasil precisam para
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=876#respondhttps://plus.google.com/101594159258578319451http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=872#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=871#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=866#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=818#respondhttp://www.vbsolutions.com.br/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=828#respondhttp://digitaldev.com.br/ -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
30/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 30/33
crescer nos padres de projetos atuais. Muitos tm medo, mas com este post vemos que no bicho de sete cabeasDidaticamente seu post est timo, se algum criticar ou disser que esta faltando ajustes porqueest em outro nvel de conhecimentoEste link vai para meu blog
24.
Carlos Anders
6 de novembro de 2013 em 22:37 (UTC -3)Responder
Muito bom o tutorial, o padro de projeto GRASP MVC est bem definido no php, facilita muitoa vida programar orientado a objetos, principalmente web, muitos programadores realmenteprecisam aprender com solues simples e prticas, parabens.
25.
r23k
24 de novembro de 2013 em 20:43 (UTC -3)
Responder
muito bom o seu artigo.
26.
Helede
12 de dezembro de 2013 em 15:51 (UTC -3)
Responder
Muito bom mesmo cara, parabns. Vou iniciar um novo projeto e vou basear em MVC. Acheisua explicao muito boa.
27.
adrmasterCarlos Adriano
17 de dezembro de 2013 em 9:39 (UTC -3)
Responder
Opa, muito bom, isso quase um framework a parte. Estou usando num projeto. E se eu quiserpassar parmetro para uma view redirecionada por exemplo: header(Location: ?controle=Contato&acao=listarContato); Se eu precisar passar parametros para o listarContato,como procedo?
28.
batistafic
19 de janeiro de 2014 em 13:20 (UTC -3)
Responder
Muito obrigado por compartilhar seu conhecimento. O tutorial um dos melhores e maisdidticos que eu j li.
29.
RafaelFerreira
24 de janeiro de 2014 em 15:46 (UTC -3)
Responder
Ol e em que camada coloco as excees personalizadas que criar?
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=919#respondhttp://rafaelferreira.netii.net/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=917#respondhttp://gravatar.com/batistafichttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=909#respondhttp://gravatar.com/adrmasterhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=908#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=892#respondhttp://deep/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=881#respondhttp://www.andershost.com.br/ -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
31/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 31/33
1.
Tarcsio
24 de janeiro de 2014 em 16:12 (UTC -3)
Responder
Boa tarde Rafael.
As excees personalizadas podem ficar em qualquer camada. Por exemplo, se voc
quiser lanar uma exceo por um erro de banco de dados, provavelmente isso ficar nacamada de modelo, j se voc quiser lanar uma exceo porque o cara chamou umcomando / mtodo que no existe, essa ficaria na camada de controle. O que voc tem quefazer tratar as excees camada a camada, ou seja, se voc chamar a camada de modelodentro da camada de controle e a mesma lanar uma exceo personalizada, o certo tratar com try{}catch( Exception ){} para ignorar a mesma ou at mesmo mostrar umamensagem de erro ao usurio.
1.
RafaelFerreira
24 de janeiro de 2014 em 17:02 (UTC -3)
Responder
Obrigado pela ateno, outra questo, eu coloco os arquivos/classes de exceo napasta da camada ou dentro da camada eu coloco uma pasta de exception prpria
tipomodels/exception/ClasseException.phpoumodels/ClasseExceptions.php
Qual o mais correto?
30.
Danilo
24 de fevereiro de 2014 em 18:19 (UTC -3)
Responder
Ol Tarcsio, tudo bom???
Seguinte, comecei a pouco numa nova empresa e o pessoal daqui criou nosso sistemainteiramente baseado neste seu exemplo Porem, ningum da equipe tinha muita experinciacom o modelo MVC Ento alguns problemas surgiram
O maior deles para mim agora esta no layout Todos os demais membros da equipeimplementaram seus HTML/CSS em cada uma das views de suas telas Porem isso insano!!!Quando precisarmos, e vamos precisar, dar manuteno no layout teremos um ENORMEproblema!!!
Eu ainda sou novo no MVC tbm Mas j trabalhei em outra empresa com um j montado.
Enfim, minha dvida quanto a criao de uma view master com o layout padro do site. Paraque as demais views tenham APENAS o contedo interno de cada aplicao.
Ser q vc poderia me dar uma luz em como procedo nisto?? Nem que seja me indicar algumoutro site com alguma luz sobre o assunto!
Desde j agradeo pela fora! Seu MVC foi fundamental para ns aqui!
Grande abraoDanilo
1.
RafaelFerreira
25 de fevereiro de 2014 em 10:32 (UTC -3)
Responder
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=928#respondhttp://rafaelferreira.netii.net/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=927#respondhttp://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=921#respondhttp://rafaelferreira.netii.net/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=920#respondhttp://digitaldev.com.br/ -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
32/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/ 32/33
Olha muito simples divida sua view em trs arquivos config.php (define constantes com aspastas usadas), header.php( cabealho), footer.php(rodap) ento na view independentes chame o contedo da view incluindo sempre o config, header, o contedo da view atuale footer se necessrios.. estou fazendo assim
1.
Danilo
26 de fevereiro de 2014 em 17:45 (UTC -3)
Responder
Hmmm,Eu j estou fazendo assim nas minhas aplicaes e alguns outros membros tbmfizeram isso. Entretanto eles ainda fizeram arquivos (topo, rodape, etc) proprios.Mas com a mesma cara
Mas isso no o ideal. Eu queria mesmo era criar um template master e aplicar asviews dentro dele Invertendo essa logica. Ou seja, ao inves deu colocar o includedos arquivos em cada view, eu incluiria cada view num template.
Mas enfim, eu ja convenci o pessoal a migrar para um framework MCV maiscompleto. Pois creio que teremos mais desafios la pra frente
Abs
1. Entendendo o MVC (Model-View-Controll er) | Digita lDev
23 de janeiro de 2013 em 8:29 (UTC -3) Link para este comentrio
Responder
[...] Exemplo de MVC com PHP [...]
Deixe uma dvida, resposta ou sugesto
Escreva o seu comentrio aqui...
CategoriasProgramaoPHPC / C++JavaScript / AjaxBanco de DadosMySQLPostgreSQLFrameworksHTML / XHTMLCSSAndroid SDKMVCJavaScript / Ajax
Web ServersLinux
Mais populares da semana
Usando mesmo HD externo no Mac OSX, Windows e Ubuntu
396views
Exemplo de MVC com PHP 344views
Comunicando-se com o Facebookusando PHP
207views
Instalando e Configurando oAmbiente de Programao C /C++
70 views
Android: Usando a internet doseu computador com USB
68 views
http://www.digitaldev.com.br/2013/02/22/android-usando-a-internet-do-seu-computador-com-usb/#commentshttp://www.digitaldev.com.br/2013/02/22/android-usando-a-internet-do-seu-computador-com-usb/http://www.digitaldev.com.br/2011/06/30/instalando-e-configurando-o-ambiente-de-programacao-c-c/#commentshttp://www.digitaldev.com.br/2011/06/30/instalando-e-configurando-o-ambiente-de-programacao-c-c/http://www.digitaldev.com.br/2011/12/04/se-comunicando-com-o-facebook-usando-php/#commentshttp://www.digitaldev.com.br/2011/12/04/se-comunicando-com-o-facebook-usando-php/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/http://www.digitaldev.com.br/2013/03/06/usando-mesmo-hd-externo-no-mac-os-x-windows-e-ubuntu/#commentshttp://www.digitaldev.com.br/2013/03/06/usando-mesmo-hd-externo-no-mac-os-x-windows-e-ubuntu/http://www.digitaldev.com.br/category/sistemas-operacionais/linux/http://www.digitaldev.com.br/category/servidores/web-servers/http://www.digitaldev.com.br/category/programacao/javascript/http://www.digitaldev.com.br/category/padroes-de-projeto/mvc/http://www.digitaldev.com.br/category/frameworks/android-sdk/http://www.digitaldev.com.br/category/linguagens-de-estilo/css/http://www.digitaldev.com.br/category/linguagens-de-marcacao/html/http://www.digitaldev.com.br/category/frameworks/http://www.digitaldev.com.br/category/banco-de-dados/postgresql/http://www.digitaldev.com.br/category/banco-de-dados/mysql/http://www.digitaldev.com.br/category/banco-de-dados/http://www.digitaldev.com.br/category/programacao/javascript/http://www.digitaldev.com.br/category/programacao/c-c/http://www.digitaldev.com.br/category/programacao/php/http://www.digitaldev.com.br/category/programacao/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=700#respondhttp://www.digitaldev.com.br/2013/01/18/entendendo-o-mvc-model-view-controller/http://www.digitaldev.com.br/2013/01/22/exemplo-de-mvc-com-php/?replytocom=929#respond -
7/21/2019 Exemplo de MVC Com PHP e Outros Padres de Projeto
33/33
23/7/2014 Exemplo de MVC com PHP e outros padres de projeto
Encontre-nos no Facebook
DigitalDev
2 9 0 p e s s o a s c u r t i r a m D i g i t a l D e v .
Curtir
ltimos Comentrios
leonepgnem Instalando e configurando oZend FrameworkGustavo em Usando mesmo HD externono Mac OS X, Windows e UbuntuJoo Carlos Almeida em Usando mesmoHD externo no Mac OS X, Windows eUbuntu
Parceiros
Anotaes por Elaine Naomi
Tags
AgregaoAmbiente de DesenvolvimentoAmbiente deProgramaoBanco de dadosC++ClassesComposio Construtorescssdesign patterns
DestrutoresEclipseEncapsulamento FacebookFrameworkHeranaInjeo SQLjQuerylinuxMetodologiasMinGWMVCMySQLOOPPadres de
ProjetoPHPPHP/FIPHP/FI 2.0PHP 3PHP 4PHP5POOProgramao Orientada a ObjetoRasmus Lerdorf
SeguranaSingletonSQLSQL InjectionTestes deSoftwareTutoriaisTutorialValidao de DadosZend EngineZend FrameworkZF
Copyright
2014 DigitalDev.
Voltar ao topo
Powered by WordPressand the Graphene Theme.
http://www.graphene-theme.com/http://wordpress.org/http://www.digitaldev.com.br/tag/zf/http://www.digitaldev.com.br/tag/zend-framework/http://www.digitaldev.com.br/tag/zend-engine/http://www.digitaldev.com.br/tag/validacao-de-dados/http://www.digitaldev.com.br/tag/tutorial/http://www.digitaldev.com.br/tag/tutoriais/http://www.digitaldev.com.br/tag/testes-de-software/http://www.digitaldev.com.br/tag/sql-injection/http://www.digitaldev.com.br/tag/sql/http://www.digitaldev.com.br/tag/singleton/http://www.digitaldev.com.br/tag/seguranca/http://www.digitaldev.com.br/tag/rasmus-lerdorf/http://www.digitaldev.com.br/tag/programacao-orientada-a-objeto/http://www.digitaldev.com.br/tag/poo/http://www.digitaldev.com.br/tag/php-5/http://www.digitaldev.com.br/tag/php-4/http://www.digitaldev.com.br/tag/php-3/http://www.digitaldev.com.br/tag/phpfi-2-0/http://www.digitaldev.com.br/tag/phpfi/http://www.digitaldev.com.br/tag/php/http://www.digitaldev.com.br/tag/padroes-de-projeto/http://www.digitaldev.com.br/tag/oop/http://www.digitaldev.com.br/tag/mysql/http://www.digitaldev.com.br/tag/mvc/http://www.digitaldev.com.br/tag/mingw/http://www.digitaldev.com.br/tag/metodologias/http://www.digitaldev.com.br/tag/linux-2/http://www.digitaldev.com.br/tag/jquery/http://www.digitaldev.com.br/tag/injecao-sql/http://www.digitaldev.com.br/tag/heranca/http://www.digitaldev.com.br/tag/framework/http://www.digitaldev.com.br/tag/facebook/http://www.digitaldev.com.br/tag/encapsulamento/http://www.digitaldev.com.br/tag/eclipse/http://www.digitaldev.com.br/tag/destrutores/http://www.digitaldev.com.br/tag/design-patterns/http://www.digitaldev.com.br/tag/css-2/http://www.digitaldev.com.br/tag/construtores/http://www.digitaldev.com.br/tag/composicao/http://www.digitaldev.com.br/tag/classes/http://www.digitaldev.com.br/tag/c/http://www.digitaldev.com.br/tag/banco-de-dados-2/http://www.digitaldev.com.br/tag/ambiente-de-programacao/http://www.digitaldev.com.br/tag/ambiente-de-desenvolvimento/http://www.digitaldev.com.br/tag/agregacao/http://elainenaomi.wordpress.com/http://www.digitaldev.com.br/2013/03/06/usando-mesmo-hd-externo-no-mac-os-x-windows-e-ubuntu/#comment-936http://www.digitaldev.com.br/2013/03/06/usando-mesmo-hd-externo-no-mac-os-x-windows-e-ubuntu/#comment-937http://www.digitaldev.com.br/2011/10/11/instalando-e-configurando-o-zend-framework/#comment-938http://gravatar.com/leonepgnhttps://www.facebook.com/MarcioAdrielhttps://www.facebook.com/domingosnunes.tihttps://www.facebook.com/wenderpmachadohttps://www.facebook.com/WesleyOliveiraPaixaohttps://www.facebook.com/wandersonwillercpmhttps://www.facebook.com/matheusmmohttps://www.facebook.com/miqueias.rafaelhttps://www.facebook.com/DigitalDevhttps://www.facebook.com/DigitalDevhttps://www.facebook.com/DigitalDev
top related