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>
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');
Давай!
Для начала, я хотел бы подчеркнуть истинное понятие MVC:
MVC-это шаблон архитектуры программного обеспечения, которая отделяет информации (бизнес-правил) интерфейс, с которым пользователь взаимодействует.
То есть, ваш код каким-либо образом должен быть установлен в блоке гигант, как если бы это был структурного программирования(Как в языке C, например);
- Это даже сложно кого-то здесь сказать вам, как "позвонить" метод...в программировании, мы все шаги, чтобы научиться думать по-крупному!
Вам предлагаю внимательно посмотрите на ссылку, которую я пошлю до конца, чтобы узнать все шаг за шагом и стать программистом в будущем!
, Надеюсь, решить другие вопросы их в будущем! ;)
Https://www.webdevbr.com.br/mvc-e-php-entendendo-o-padrao-na-pratica-criando-um-framework-php