1
resposta

Qual a maneira correta de cadastrar dados ?

Boa tarde, a minha dúvida é a seguinte, estou aplicando a orientação a objetos em meu projeto, porém estou em dúvida na hora do submit dos formularios:

Tenho os seguintes arquivos:

Arquivo novo-cliente.php

<?php
require_once $_SERVER['DOCUMENT_ROOT']  . "/SistemaVrau-OO/constant.php";
require_once ROOT_PATH . "cabecalho.php";
require_once ROOT_PATH . "controller/ClienteController.php";
require_once ROOT_PATH . "logica-empresa.php";

verificaEmpresa();

?>
<div class="blocoTituloPagina">
  <h1>Novo Cliente</h1>
</div>
    <form action="controller/ClienteController.php" method="post" enctype="multipart/form-data"> 
        <div>
            <?php include("cliente-formulario-base.php"); ?>
            <div class="pBlocoButton">
              <a href="clientes.php" class="pButton">Voltar</a>
              <button class="pButton pButtonSalvar" type="submit">Cadastrar</button>
            </div>
        </div>
    </form>
<?php require_once('rodape.php'); ?>

Arquivo controller/ClienteController.php

<?php
require_once $_SERVER['DOCUMENT_ROOT']  . "/SistemaVrau-OO/constant.php";
require_once ROOT_PATH . 'GenericUtil.php';
require_once ROOT_PATH . 'model/Cliente.php';
require_once ROOT_PATH . 'dao/GenericDAO.php';

class ClienteController {

    public function salvar() {
        $dao = new GenericDAO();
        // logica para salvar cliente no banco        
        if(isset($_POST['id'])) {
            $id = $_POST['id'];
        }
        $nome = $_POST["nome"];
        $cnpj = $_POST["cnpj"];
        $inscricaoEstadual = $_POST["inscricaoEstadual"];
        $telefone = $_POST["telefone"];
        $email = $_POST["email"];
        $celular = $_POST["celular"];
        $tipoPessoa = $_POST["tipoPessoa"];

        $caminhoImg = "img/empresas/empresa-{$_SESSION['empresa_id']}/clientes/";
        $imagem = uploadArquivo($caminhoImg);

        $cliente = new Cliente();
        $cliente->nome = $nome;
        $cliente->cnpj = $cnpj;
        $cliente->inscricao_estadual = $inscricaoEstadual;
        $cliente->telefone = $telefone;
        $cliente->email = $email;
        $cliente->celular = $celular;
        $cliente->tipo_pessoa = $tipoPessoa;
        $cliente->imagem = $imagem;

        if ($dao->inserir("clientes", $cliente)) {
            echo "Salvo";
        } else {
            echo "Erro";
        }
    }

    public function atualizar() {
    // logica para atualizar cliente no banco
    }

    public function remover() {
    // logica para remover cliente do banco
    }

    public function listar() {
        $dao = new GenericDAO();
        // logica para listar toodos os clientes do banco
        $objListaClientes = $dao->listarAll("clientes");          
        $_REQUEST['clientes'] = $objListaClientes;
    }
}
?>

Arquivo dao/GenericDAO.php

<?php
require_once $_SERVER['DOCUMENT_ROOT']  . "/SistemaVrau-OO/constant.php";
require_once ROOT_PATH .'conexao.php';

class GenericDAO {
    public function inserir($entidade, $dados) {
        $Mensagem = "";
    if (empty($dados)) {
        switch($entidade) {
            case "clientes":
                $query = "INSERT INTO clientes (nome, cnpj, telefone, email, celular, tipo_pessoa, inscricao_estadual, imagem, empresa_id) VALUES ('" . $dados->nome . "', '" . $dados->cnpj . "', '" . $dados->telefone . "', '" . $dados->email . "', '" . $dados->celular . "', '" . $dados->tipo_pessoa . "', '" . $dados->inscricao_estadual . "', '" . $dados->imagem . "', {$_SESSION['empresa_id']})";
            break;
        }

        try {
            $conexao = Conexao::pegarConexao();
            $conexao->exec($query);
            return true;      
        } catch(Exception $e) {
            return false;
    }
}

Gostaria de saber como dar o submit do form direto na function salvar() do meu controller, caso não for possível, qual outra maneira posso salvar meu formulário ?

1 resposta

Oi Guilherme, tudo bom?

O formulário em sí não consegue instanciar e chamar o método dentro da classe. Para fazer esse tipo de trabalho, a gente cria uma arquitetura de rotas.

Com rotas você aponta uma url para um bloco de código dentro de uma classe =)

Existem diversas formas de implementar essa arquitetura das mais simples as mais complexas. E, a maioria dos frameworks MVC do mercado já fazem isso, inclusive.

Uma boa sacada se você quiser de qualquer forma implementar do zero, é dar uma olhada nos frameworks mais famosos como Laravel e Symfony pra ver como eles fazem por baixo dos panos =)

Abraço