/ * Hello. A few years ago in college I had a practice class of standards with PhP, and one of them was the MVC. I learned with my teacher the MVC standard, but I do not know until now the same was taught in the correct way. Whenever I see projects with MVC standards are a bit different from mine, in fact, the Controller class does not seem to make much sense in what I've learned. I would like you to take a look at the way I program in MVC and tell you whether I'm doing it right or how to improve it, because I'm really lost, especially in Controller and Model.
In the Model:
class ModelProduto{
private $id;
private $descricao;
private $valor;
public __construct(){
// nada por aqui no momento...
}
protected function inserirProduto($produto){
// realiza conexão com o banco
// executa query no banco passando valores $produto->id, $produto->descricao, $produto->valor
// retorna boolean se foi inserido com sucesso no banco ou nao
return $resultado;
}
protected function buscarTodosProdutos(){
// realiza conexão com o banco
// traz os registros e armazenam em algum lugar, no caso, num array
$produtos = new Array();
foreach(resultado in lista){
$produto = new Produto();
$produto->id = resultado['id'];
$produto->descricao = resultado['descricao'];
$produto->valor = resultado['valor'];
$produtos[] = $produto;
}
return $produtos;
}
// metodos Get e metodos Set em visibilidade public...
}
Once you have done this, in the Controller where I have the most doubt, I have learned how to structure it in the following way:
class Produto extends ModelProduto{
// as vezes aqui um método ou outro (geralmente static) para montar um objeto ou fazer algo extra
// sempre tenho a função de montar objetos para ser usada mais tarde
public static criaObj($descricao, $valor){
$produto = new Produto();
$produto->setDescricao($descricao);
$produto->setValor($valor);
return $produto;
}
public function inserirProduto($produto){
return parent::inserirProduto()
}
public function buscarTodosProdutos(){
return parent::buscarTodosProdutos()
}
}
Once this MVC is structured, in View, if I have a form to register this product, or display it, I do the following:
<html>
<header></header>
<body>
<form method="POST" action="manipulaProduto.php">
<!-- formulário aqui -->
</form>
</body>
</html>
Consequently I create another file in another folder called manipula, where I check the data of the forms and send to controller, more or less like this:
if(isset($_POST['formularioEnviado'])){
inserir();
}
function inserir(){
// crio variaveis para pgar os $_POST e validar os campos, verificar se não existem nulos, poucos caracteres etc
$validado = validarCampos();
if($validado){
// se passar pelas validações, chamo o inserir do Controller
$inserido = inserirProduto();
if($inserido){
// envio alguma modal para a view informando que tudo foi validado com sucesso e demais eventos se necessário
return $inserido;
}
}
// envio alguma modal para a view informando erro no formulario se não entrar no if
return $erros;
}
function validarCampos(){
// valida os campos e retorna para a função acima
}
function inserirProduto(){
// chamo o Controller e crio um objeto
$produto = Produto->criaObj($_POST["descricao"], $_POST["valor"])
$resposta = $produto->inserirProduto($produto);
return $resposta;
}
This is the pattern I use in my projects. It was not all I learned in college, for the most part I've developed my own way of programming, but the question is the MVC standard. Sometimes I think that manipulaProducto.php does the role that the Controller should do, because the controller does nothing more than transfer a function to the Model, which is almost useless to my view. Can you tell me how this structure works, if something could be improved or if the MVC standard is really wrong? Remembering that this structure that I created here to present my problem is something extremely summarized and I did not get to run the codes, but this is the form that I currently program. Thanks!