CRUD с MVC и DAO в PHP


Я начинаю с программирования, и я делаю CRUD с MVC и DAO. Интересно, будет ли способ, что я делаю правильно, что можно было бы улучшить и как я могу вызвать метод вставки из ProdutoController в форме.

<?php

    class Database {

        private $host = "localhost";
        private $username = "root";
        private $password = "123456";
        private $database = "crud";


        public function conecta() 
        {
            $conexao = new mysqli($this->host, $this->username, $this->password, $this->database);
            return $conexao;        
        }
    }

<?php 

    class Produto {

        private $id;
        private $nome;
        private $descricao;
        private $preco;

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

        public function getDescricao() {
            return $this->descricao;
        }

        public function setDescricao($descricao) {
            $this->descricao = $descricao;
        }

        public function getPreco() {
            return $this->preco;
        }

        public function setPreco($preco) {
            $this->preco = $preco;
        }

    }

<?php  

    class ProdutoDAO {

        function adiciona(Database $conexao, Produto $produto) {

            $query = "INSERT INTO produtos (nome, descricao, preco) VALUES ('{$produto->getNome()}', '{$produto->getDescricao()}', '{$produto->getPreco()}')";  
            mysqli_query($conexao->conecta(), $query);
        }

    }

<?php  

require_once ('../models/Produto.php');
require_once ('../models/ProdutoDAO.php');
require_once ('../config/Database.php');

class ProdutoController {

    public function insere() {
        $nome = $_POST['nome'];
        $descricao = $_POST['descricao'];
        $preco = $_POST['preco'];
        $conexao = new Database();
        $produto = new Produto();
        $produto->setNome($nome);
        $produto->setPreco($preco);
        $produto->setDescricao($descricao);
        $produtoDao = new ProdutoDao();
        $produtoDao->adiciona($conexao, $produto);
    }

}

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="../../public/css/bootstrap.min.css" rel="stylesheet">
<title>Adiciona Produto</title>
</head>
<body>
<div class="container">
<h3>Adicionar Produto</h3>
<form method="post" action="../../controllers/ProdutoController.php">
  <div class="form-group">
    <label>Nome</label>
    <input type="text" class="form-control" name="nome">
  </div>
  <div class="form-group">
    <label>Descrição</label>
    <input type="text" class="form-control" name="descricao">
  </div>
  <div class="form-group">
    <label>Preço</label>
    <input type="text" class="form-control" name="preco">
  </div>
  <button type="submit" class="btn btn-primary">Adicionar</button>
</form>
</div>
</body>
</html>
Author: novic, 2016-11-14

2 answers

Я изменил некоторые детали:

класс Database

class Database 
{
    private $host = "localhost";
    private $username = "root";
    private $password = "123456";
    private $database = "crud";
    private $conexao = null; 

    public function __construct()
    {          
        $this->conect();
    }

    public function getConection()
    {
        return $this->conexao;
    }

    private function conect() 
    {
        $this->conexao = mysqli_connect(
                  $this->host, 
                  $this->username, 
                  $this->password, 
                  $this->database);
    }
}

class ProdutoDAO

class ProdutoDAO 
{
    private $db;
    public function __construct(Database $db)
    {
        $this->db = $db;
    }

    public function add(Produto $produto) 
    {
        $nome = $produto->getNome();
        $descricao = $produto->getDescricao();
        $preco = $produto->getPreco();

        $query = "INSERT INTO produtos (nome, descricao, preco) VALUES(?,?,?)"; 
        $stmt = mysqli_prepare($this->db->getConection(), $query);
        mysqli_stmt_bind_param($stmt,'sss', $nome, $descricao, $preco);
        mysqli_stmt_execute($stmt); 
        mysqli_stmt_close($stmt);
    }

}

Помимо этих изменений, я думаю, что сомневается больше будет, как запустить это все, зовя запроса <form />

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="../../public/css/bootstrap.min.css" rel="stylesheet">
<title>Adiciona Produto</title>
</head>
<body>
<div class="container">
<h3>Adicionar Produto</h3>
<form method="post" action="../../controllers/ProdutoController.php">
  <div class="form-group">
    <label>Nome</label>
    <input type="text" class="form-control" name="nome">
  </div>
  <div class="form-group">
    <label>Descrição</label>
    <input type="text" class="form-control" name="descricao">
  </div>
  <div class="form-group">
    <label>Preço</label>
    <input type="text" class="form-control" name="preco">
  </div>
  <button type="submit" class="btn btn-primary">Adicionar</button>
</form>
</div>
</body>
</html>

Их <form /> action называет ProdutoController.php, создайте файл с тем же именем и:

<?php  

require_once ('../models/Produto.php');
require_once ('../models/ProdutoDAO.php');
require_once ('../config/Database.php');

$db      = new Database();
$dao     = new ProdutoDao($db);

$produto = new Produto();
$produto->setNome($nome);
$produto->setPreco($preco);
$produto->setDescricao($descricao);

$dao->add($produto); // aqui grava o resultado enviado do form

redirect('Location:index.php');
 2
Author: novic, 2016-11-14 18:49:24

Давай!

Для начала, я хотел бы подчеркнуть истинное понятие MVC:

MVC-это шаблон архитектуры программного обеспечения, которая отделяет информации (бизнес-правил) интерфейс, с которым пользователь взаимодействует.

То есть, ваш код каким-либо образом должен быть установлен в блоке гигант, как если бы это был структурного программирования(Как в языке C, например);

- Это даже сложно кого-то здесь сказать вам, как "позвонить" метод...в программировании, мы все шаги, чтобы научиться думать по-крупному!

Вам предлагаю внимательно посмотрите на ссылку, которую я пошлю до конца, чтобы узнать все шаг за шагом и стать программистом в будущем!

, Надеюсь, решить другие вопросы их в будущем! ;)

Https://www.webdevbr.com.br/mvc-e-php-entendendo-o-padrao-na-pratica-criando-um-framework-php

 0
Author: Dante, 2016-11-14 18:12:33