Através do curso de PHP que fiz aprendi um modelo de loja virtual totalmente estruturado, apesar de ser legalzinho quero usar a estrutura MVC e refazer essa loja...
Pois bem, quando eu trabalho com ORM como meio de conexão, funciona, porém, aqui na empresa não querem ORM, infelizmente, querem PDO com Prepared Statement. (Eu sei, eu sei... Também não entendi o motivo, mas infelizmente tenho que acatar...). RSRSRS
Vamos aos principais arquivos... Que com o Doctrine funcionava perfeitamente, mas tive que readaptar para o PDO com Prepared Statement...
bootstrap.php
<?php
/*
* Com o adminAppLoad, eu chamo os meus arquivos de VIEW e CONTROLLER.
* Esses arquivos serao responsaveis por direcionar os meus arquivos.
*/
function adminAppLoad($classe){
$dir = dirname(__FILE__);
$arquivo = "$dir/app/admin/$classe.php";
if(file_exists($arquivo)){
require_once($arquivo);
return true;
}
}
/*
* Com adminModLoad eu chamo as minhas regras de negocio, especifica para
* cada um dos Models.
*/
function adminModLoad($classe){
$dir = dirname(__FILE__);
$arquivo = "$dir/app/admin/modules/$classe.php";
if(file_exists($arquivo)){
require_once($arquivo);
return true;
}
}
/*
* Nesse metodo eu chamo as minhas classes dentro de /lib/
* A partir do classload é possivel carregar a classe de Banco.
* A mesma que carregara toda a minha aplicacao.
*/
function libLoad($classe){
$dir = dirname(__FILE__);
$arquivo = "$dir/lib/$classe.class.php";
if(file_exists($arquivo)){
require_once($arquivo);
return true;
}
}
//Carrego o meu metodo adminAppLoad.
spl_autoload_register('adminAppLoad');
//Carrego o emu metodo adminModLoad.
spl_autoload_register('adminModLoad');
//Carrego o meu metodo libLoad.
spl_autoload_register('libLoad');
/*
*Aqui eu carrego a minha classe de conexao ao DB,
*Aqui eu pego os valores da Array e coloca no DSN.
*/
$config = parse_ini_file('config/ini/config.ini');
$dsn = "{$config['driver']}:host={$config['host']};dbname={$config['banco']}";
$conn = new PDO($dsn,$config['usuario'],$config['senha']);
Main.class.php
<?php
/**
* Desenvolvimento - Loja Virtual
* Data: 13/10/2011
* @author Ewerton Melo de Souza
* Descrição: Possui os métodos responsáveis pelas
* operações padrões de CRUD.
* Esse CRUD será requerido por todo o sistema, possuindo uma estrutura padrão.
*/
class Main{
private $conn;
function __construct(){}
//Metodo generico para gravar informacoes no DB
function novo($tabela,$dados){
//Executo um foreach para separar as colunas de valores...
foreach ($dados as $coluna=>$valor){
//Passa as colunas para um Array...
$colunas[] = "`$coluna`";
//Passa os valores para um array...
$valores[] = $valor;
/**
*===============================HOLDERS=============================
*$holders[] = "?"
*Como usamos o Prepared Statement e estamos inserindo os valores
*dinamicamente, precisamos colocar dentro do VALUE as `interrogacoes`
*correspondetes a cada campo. Desta forma, criamos um Array contendo
*o valor de `?`
*===================================================================
*/
$holders[] = "?";
}
/**
*Faco a implusao dos meus dados, pegando o meu Array e convertendo em
*Strings, separando por virgulas.
*/
$colunas = implode(', ',$colunas);
$holders = implode(', ',$holders);
//Aqui eu chamo o $holders[], em VALUES da minha Query
$sql = "INSERT INTO $tabela ($colunas) VALUES ($holders)";
//Preparo meu SQL para ser executado atraves da variavel $sql
$query = $this->conn->prepare($sql);
/**
*Aqui em execute(), chamamos a nossa Array que realmente possui algum valor.
*Desta forma, toda vez que a minha Array $valores for executada, ele ira
*inserir uma valor em cada '?' da $holders[] dentro de VALUES da minha Query.
*/
$query->execute($valores);
}
//Metodo generico para ler informacoes no DB
function ler($tabela,$colunas,$cond=null){
/**
*Aqui crio a Query que sera chamada. Nela usamos valores dinamicos para
*serem inseridos em minha variavel $sql.
*/
$sql = "SELECT $colunas FROM $tabela";
//SE $cond não estiver vazia...
if(!empty($cond)){
/**
*Concatena em $sql WHERE $cond. Ficaria da seguinte
*forma, o campo $sql concatenado
* SELECT $colunas FROM $tabela WHERE $cond
*/
$sql .= " WHERE id = $cond";
}
//Preparo meu SQL para ser executado atraves da variavel $sql
$query = $this->conn->prepare($sql);
//Executo meu objeto que esta com a query SQL preparada...
$query->execute();
/**
*Com o metodo fetchAll(), eu listo todos os meus valores da Array.
*/
$result = $query->fetchAll();
//Por se tratar de uma consulta, preciso retornar o meu objeto...
return $result;
}
//Metodo generico para alterar informacoes no DB
function alterar($tabela,$dados,$id){
/**
*Aqui crio a Query que sera chamada. Nela usamos valores dinamicos para
*serem inseridos em minha variavel $sql.
*/
foreach($dados as $coluna => $valor) {
$colunas[] = "`$coluna` = ?";
$valores[] = $valor;
}
$valores[] = $id;
$colunas = implode(', ', $colunas);
/**
*Com a '?' na minha condicao id eu passarei os valores atraves de um
*Prepared Statement
*/
$sql = "UPDATE $tabela SET $colunas WHERE id = ?";
//Preparo meu SQL para ser executado atraves da variavel $sql
$query = $this->conn->prepare($sql);
$query->execute($valores);
}
//Metodo generico para deletar informacoes no DB
function deletar($tabela,$id){
//Preparo meu SQL para ser executado atraves da variavel $sql
//O '?' sera chamado atraves de um Prepared Statement
$sql = "DELETE FROM $tabela WHERE id = ?";
//Preparo meu SQL para ser executado atraves da variavel $sql
$query = $this->conn->prepare($sql);
//Executo a minha Query passando o meu valor de $id.
$query->execute(array($id));
}
}
Clientes.php
?php
class Clientes{
private $db;
private $staff;
function __cnstruct(){
$this->db = new Main();
$this->staff = new StaffLoja();
}
//Método para incluir um novo cliente na base.
function novoCliente(){
try{
if($_POST){
$dados['nome'] = $_POST['nome'];
$dados['doc'] = $_POST['doc'];
$dados['nascimento'] = $_POST['nascimento'];
$dados['endereco'] = $_POST['endereco'];
$dados['numero'] = $_POST['numero'];
$dados['compl'] = $_POST['compl'];
$dados['bairro'] = $_POST['bairro'];
$dados['cidade'] = $_POST['cidade'];
$dados['cep'] = $_POST['cep'];
$dados['uf'] = $_POST['uf'];
$dados['ddd1'] = $_POST['ddd1'];
$dados['fone1'] = $_POST['fone1'];
$dados['ddd2'] = $_POST['ddd2'];
$dados['fone2'] = $_POST['fone2'];
$dados['ddd3'] = $_POST['ddd3'];
$dados['fone3'] = $_POST['fone3'];
$dados['email'] = $_POST['email'];
$dados['username'] = $_POST['username'];
$pass = $_POST['password'];
$confirmpass = $_POST['confirmpassword'];
/*
//Retorno do método que faz a verificação e criptografa a senha.
$pass = $this->staff->authPassword($pass,$confirmpass);
*/
$dados['password'] = $_POST['password'];
$dados['ativo'] = 1;
$dados['cad_user'] = 1;
if($dados){
$this->db->novo('cliente', $dados);
}
}
}catch(Exception $e){
echo $e->getMessage() . "<br><br>";
echo $e->getTrace() . "<br><br>";
}
}
function lerCliente(){
$result = $this->db->ler('cliente','*');
return $result;
}
function alterarCliente($id){
if($_POST){
$this->db->alterar('cliente', $_POST, $id);
echo "<meta http-equiv='refresh' content='0; url=index.php?module=noticias&action=readNoticias'>";
}
return $this->db->see('cliente',$id);
}
function deletarCliente($id){
$this->db->deletar('cliente',$id);
}
}
Question
Ewerton M.
Fala galera...
Gostaria da ajuda de vocês mais uma vez...
Através do curso de PHP que fiz aprendi um modelo de loja virtual totalmente estruturado, apesar de ser legalzinho quero usar a estrutura MVC e refazer essa loja...
Pois bem, quando eu trabalho com ORM como meio de conexão, funciona, porém, aqui na empresa não querem ORM, infelizmente, querem PDO com Prepared Statement. (Eu sei, eu sei... Também não entendi o motivo, mas infelizmente tenho que acatar...). RSRSRS
Vamos lá, a estrutura que eu uso de pastas:
Vamos aos principais arquivos... Que com o Doctrine funcionava perfeitamente, mas tive que readaptar para o PDO com Prepared Statement... bootstrap.php Main.class.php Clientes.php novoCliente.tpl.php chamo as páginas da seguinte forma: Conclusão, quando vou cadastrar um novo cliente, dá o seguinte erro:Sabem me dizer porque???
As páginas se encontram, porém, ele está requerendo alguma coisa, em algum lugar que eu não estou entendendo...
Edited by Ewerton M.Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.