jerfeson 1 Denunciar post Postado Fevereiro 1, 2014 Olá pessoal boa tarde, não sei se a minha dúvida será a dúvida de outras pessoas, venho do mundo da programação estruturada,e como todo processo, estou migrando para orientação a objeto,e está sendo um choque de realidade para mim tentar entender a orientação a objeto, para essanova fase resolvi elaborar um crud simples, que irá cadastrar dados ,alterar,excluir e listar os mesmo, paraisso criei os arquivos deconexãoao banco de dados,o arquiovo de persistencia de dados, e contoledesses dados, o modelo,como get e set e também a visão bem rudimentar apenas para testes, entretanto estou enfrentando problemas paral ligar todos esses arquivos... eu praticamente criei toda a estruturam mas como vou dizer que a visão irá acionar o controle,que irá acionar o modelo,e o modelo vai ligar os dados coletados lá na visão com a classe de persistencia, e adicionar esses dados ao banco de dados.... irei postar a estrutura dos arquivos abaixo,aguardo uma alma gentil a me ajudar. Estrutura. Códigos _condig->conexao <?php /* * @author: Jerfeson Guerreiro * @project: sis_astral * @package admin * */ class conexao { private $db_host = 'localhost'; private $db_user = 'root'; private $db_pass = 'root'; private $db_name = 'sis_astral'; private $con = false; // Função para testar conexão com banco de dados public function connect(){ if(!$this->con){ $myconn = @mysql_connect($this->db_host, $this->db_user, $this->db_pass, $this->db_name); if($myconn) { $seldb = @mysql_select_db($this->db_name, $myconn); if($seldb) { $this->con = true; return true; } else { return false; } }else { return false; } } else { return true; } } public function disconnect(){ if($this->con){ if(@mysql_close()){ $this->con = false; return true; } else { return false; } } } } _config->Crud <?php /** * Created by PhpStorm. * User: Jerfeson Guerreiro * Date: 31/01/14 * Time: 21:27 */ class crud { private $sql_ins = ""; private $tabela = ""; private $sql_sel = ""; public function __construct($tabela) { $this->tabela = $tabela; return $this->tabela; } public function inserir ($campos,$valores) { $this->sql_ins = "INSERT INTO".$this->tabela."(campos) VALUES($valores)"; if(!$this->sql_ins = mysql_query( $this->sql_ins)) { die ("<center>ERRO NA CONLUSÃO"."<br/>".'LINHA:'.__LINE__."<br />".mysql_error()."<br /><a href='../_visao/index.php' >VOLTAR</a></center>"); } else { print "<script> Location='index.php;'</script>"; } } public function alterar($camposvalores, $where = NULL) { if($where) { $this->sql_upd = "UPDATE".$this->tabela."SET $camposvalores WHERE $where"; } else { $this->sql_upd = "UPDATE".$this->tabela."SET $camposvalores"; } if(!$this->sql_upd = mysql_query($this->sql_upd)){ dir("<center>ERRO NA ATUALIZAÇÃO"."<br/>Linda>".__LINE__."<br/>".mysql_error()."<br/> <a href='../_visao/index.php'>VOLTAR<a/></center>"); } else { print "<center>tualização efetuada com sucerro <br/> <a href='index.php'>Voltar</a></center>"; } } public function excluir($where = NULL) { if($where) { $this->sql_sel = "SELECT * FROM".$this->tabela. "WHERE $where"; $this->sql_del = "DELECT FROM".$this->tabela. "WHERE $where"; } else { $this->sql_sel = "SELECT * FROM".$this->tabela; $this->sql_del = "DELECT FROM".$this->tabela; } $sel = mysql_query($this->sql_sel); $regs = mysql_num_rows($this->$sel); if($regs > 0){ if($this->sql_del = mysql_query($this->sql_del)){ die ("<center> ERRO NA EXCLUSÃO"."<br />Linha:".__LINE__."<br />".mysql_error()."<br /><a href='../_visao/index.php'></a>Voltar</center>"); } else{ print "<center>Escluido com Sucesso<a href='index.php'>Voltar</a></center>"; } } else { print "<center>Registro não encontrado<a href='index.php'>Voltar</a></center>"; } } } _controle->controle.php <?php /** * Created by Secode. * User: Jerfeson Guerreiro * Date: 01/02/14 * Time: 17:44 */ require('../_modelo/modelo.php'); $p = $_POST; $cadastro = new cadastro(); $cadastro->setRazaoSocial($p['razaoSocial']); $cadastro->setNomeFantasia($p['nomeFantasia']); $cadastro->setCnpj($p['cnpj']); $cadastro->setDataInscricao($p['dataInscricao']); $cadastro->setEndereco($p['endereco']); $cadastro->setCidade($p['cidade']); $cadastro->setCep($p['cep']); $cadastro->setBairro($p['bairro']); $cadastro->setTelefone($p['telefone']); $cadastro->setCelular($p['celular']); _modelo->modelo.php <?php /** * Created by Secode. * User: Jerfeson Guerreiro * Date: 31/01/14 * Time: 23:35 */ class cadastro { private $razaoSocial; private $nomeFantasia; private $cnpj; private $dataInscricao; private $endereco; private $cidade; private $cep; private $bairro; private $telefone; private $celular; /** * @param mixed $bairro */ public function setBairro($bairro) { $this->bairro = $bairro; } /** * @return mixed */ public function getBairro() { return $this->bairro; } /** * @param mixed $celular */ public function setCelular($celular) { $this->celular = $celular; } /** * @return mixed */ public function getCelular() { return $this->celular; } /** * @param mixed $cep */ public function setCep($cep) { $this->cep = $cep; } /** * @return mixed */ public function getCep() { return $this->cep; } /** * @param mixed $cidade */ public function setCidade($cidade) { $this->cidade = $cidade; } /** * @return mixed */ public function getCidade() { return $this->cidade; } /** * @param mixed $cnpj */ public function setCnpj($cnpj) { $this->cnpj = $cnpj; } /** * @return mixed */ public function getCnpj() { return $this->cnpj; } /** * @param mixed $dataInscricao */ public function setDataInscricao($dataInscricao) { $this->dataInscricao = $dataInscricao; } /** * @return mixed */ public function getDataInscricao() { return $this->dataInscricao; } /** * @param mixed $endereco */ public function setEndereco($endereco) { $this->endereco = $endereco; } /** * @return mixed */ public function getEndereco() { return $this->endereco; } /** * @param mixed $nomeFantasia */ public function setNomeFantasia($nomeFantasia) { $this->nomeFantasia = $nomeFantasia; } /** * @return mixed */ public function getNomeFantasia() { return $this->nomeFantasia; } /** * @param mixed $razaoSocial */ public function setRazaoSocial($razaoSocial) { $this->razaoSocial = $razaoSocial; } /** * @return mixed */ public function getRazaoSocial() { return $this->razaoSocial; } /** * @param mixed $telefone */ public function setTelefone($telefone) { $this->telefone = $telefone; } /** * @return mixed */ public function getTelefone() { return $this->telefone; } } _Visao->index.php <?php /** * Created by Secode. * User: Jerfeson Guerreiro * Date: 01/02/14 * Time: 17:59 */ if ($_SERVER['REQUEST_METHOD'] == 'POST') { require("../_controle/controle.php"); } ?> <form action="" method="post"> Razão Social: <input type="text" name="razaoSocial" /><br /> Nome Fantasia: <input type="text" name="nomeFantasia"/><br /> CNPJ: <input type="text" name="cnpj"/><br /> Data de Inscrição: <input type="date" name="dataInscricao"/><br /> Endereço: <input type="text" name="endereco"/><br /> Cidade: <input type="text" name="cidade"/><br /> CEP: <input type="text" name="cep"/><br /> Bairro: <input type="text" name="bairro"/><br /> Telefone: <input type="text" name="telefone"/><br /> <input type="submit" value="Enviar"> </form> Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Danilo 43 Denunciar post Postado Fevereiro 1, 2014 Eu e utilizo um framework chamado "Yii Framework PHP", só no controle você saiu um pouco do padrão que eu estou acostumado a ver, o controller que chama a view (não o contrário). nos frameworks que eu já utilizei funciona assim: index > roteador > controller (usa o model) > view Explicando: O arquivo "index.php" recebe todas as requisições (exceto estáticas, como imagens, css) Uma classe Roteadora é acionada, e escolhe qual Controller (é uma classe também) deve ser chamado Exemplo, "page/edit" chama a ação edit (que é um método da classe Page) O ação "edit" chama uma visualização, exemplo "views/edit.php" Vou citar a estrutura adotada pelo Yii Framework (que também é adotada por outros também) index.php protected/controllers/PageController.php models/Page.php views/page/edit.php view.php Compartilhar este post Link para o post Compartilhar em outros sites
jerfeson 1 Denunciar post Postado Fevereiro 1, 2014 Eu e utilizo um framework chamado "Yii Framework PHP", só no controle você saiu um pouco do padrão que eu estou acostumado a ver, o controller que chama a view (não o contrário). nos frameworks que eu já utilizei funciona assim: index > roteador > controller (usa o model) > view Explicando: O arquivo "index.php" recebe todas as requisições (exceto estáticas, como imagens, css) Uma classe Roteadora é acionada, e escolhe qual Controller (é uma classe também) deve ser chamado Exemplo, "page/edit" chama a ação edit (que é um método da classe Page) O ação "edit" chama uma visualização, exemplo "views/edit.php" Vou citar a estrutura adotada pelo Yii Framework (que também é adotada por outros também) index.php protected/controllers/PageController.php models/Page.php views/page/edit.php view.php Obrigado pela orientação, eu sei que existem framworks,mas queria aprender sem framework, para entender os processos, e depois passar a usar o framework, mesmo assim obrigado.... estou prospectando trabalhar com zend framework Compartilhar este post Link para o post Compartilhar em outros sites
Enrico Pereira 299 Denunciar post Postado Fevereiro 1, 2014 Vamos lá. O primeiro ponto é que estrutura de pastas não define ou muda absolutamente NADA. Isso é apenas uma questão de organização e não há padrão algum definido. class conexao Classes começam com letra maiúscula (StudlyCaps). É um padrão seguido por todas as linguagens há décadas. private $db_host = 'localhost'; private $db_user = 'root'; private $db_pass = 'root'; private $db_name = 'sis_astral'; E se você quiser trocar isso? Terá que editar a classe, o que a torna não-reutilizável. Configuração não é parte da classe, é parte do objeto. Esses dados deveriam ser passados pelo construtor. $myconn = @mysql_connect($this->db_host, $this->db_user, $this->db_pass, $this->db_name); mysql_* produz E_DEPRECATED a partir do PHP 5.5 e não tem suporte há anos. Além disso, arroba é uma má prática. A PDO substitui toda essa classe facilmente. return true; Se sua intenção é tratar erros (o que é), use exceptions. Retornar true/false para isso é uma gambiarra tamanha (admissível em C). private $sql_ins = ""; private $tabela = ""; private $sql_sel = ""; Todo o propósito da orientação a objetos vai por água abaixo aqui. Crud pode ser feito em qualquer tipo de data storage, não somente num banco de dados. Aqui você precisa ter uma abstração para diminuir o acoplamento. Guarde bem essas duas palavras, são bem importantes em OO. return $this->tabela; Todo construtor é void, ou seja, não retorna nada. Construtores apenas constroem objetos. die ("<center>ERRO NA CONLUSÃO"."<br/>".'LINHA:'.__LINE__."<br />".mysql_error()."<br /><a href='../_visao/index.php' >VOLTAR</a></center>"); Por que se a consulta falhar o sistema tem que morrer? Novamente, use exceptions. print "<script> Location='index.php;'</script>"; Side-effect não relacionado com CRUD, separe as responsabilidades das classes. O resultado disso é um erro Headers already sent piscando na telinha. require('../_modelo/modelo.php'); Autoloading e PSR-0. $p = $_POST; $cadastro = new cadastro(); $cadastro->setRazaoSocial($p['razaoSocial']); $cadastro->setNomeFantasia($p['nomeFantasia']); $cadastro->setCnpj($p['cnpj']); $cadastro->setDataInscricao($p['dataInscricao']); $cadastro->setEndereco($p['endereco']); $cadastro->setCidade($p['cidade']); $cadastro->setCep($p['cep']); $cadastro->setBairro($p['bairro']); $cadastro->setTelefone($p['telefone']); $cadastro->setCelular($p['celular']); E se esses campos não estiverem preenchidos? Um array não garante nada, é necessário, no mínimo, um isset. Outro ponto é que um cadastro deveria ser um simples VO, não há a necessidade de setters, basta um construtor. if ($_SERVER['REQUEST_METHOD'] == 'POST') { require("../_controle/controle.php"); } Você precisa de um URL router. Não é responsabilidade da view chamar um controller. :seta: Classes não são repositórios de procedimentos. Compartilhar este post Link para o post Compartilhar em outros sites
jerfeson 1 Denunciar post Postado Fevereiro 2, 2014 Vamos lá. O primeiro ponto é que estrutura de pastas não define ou muda absolutamente NADA. Isso é apenas uma questão de organização e não há padrão algum definido. Classes começam com letra maiúscula (StudlyCaps). É um padrão seguido por todas as linguagens há décadas. E se você quiser trocar isso? Terá que editar a classe, o que a torna não-reutilizável. Configuração não é parte da classe, é parte do objeto. Esses dados deveriam ser passados pelo construtor. mysql_* produz E_DEPRECATED a partir do PHP 5.5 e não tem suporte há anos. Além disso, arroba é uma má prática. A PDO substitui toda essa classe facilmente. Se sua intenção é tratar erros (o que é), use exceptions. Retornar true/false para isso é uma gambiarra tamanha (admissível em C). Todo o propósito da orientação a objetos vai por água abaixo aqui. Crud pode ser feito em qualquer tipo de data storage, não somente num banco de dados. Aqui você precisa ter uma abstração para diminuir o acoplamento. Guarde bem essas duas palavras, são bem importantes em OO. Todo construtor é void, ou seja, não retorna nada. Construtores apenas constroem objetos. Por que se a consulta falhar o sistema tem que morrer? Novamente, use exceptions. Side-effect não relacionado com CRUD, separe as responsabilidades das classes. O resultado disso é um erro Headers already sent piscando na telinha. Autoloading e PSR-0. E se esses campos não estiverem preenchidos? Um array não garante nada, é necessário, no mínimo, um isset. Outro ponto é que um cadastro deveria ser um simples VO, não há a necessidade de setters, basta um construtor. Você precisa de um URL router. Não é responsabilidade da view chamar um controller. :seta: Classes não são repositórios de procedimentos. Obrigado suas orientações seram de grade ajuda para o meu conhecimento.... agradeço a sua paciencia em pontuar os pontos relevantes, Compartilhar este post Link para o post Compartilhar em outros sites