Am I using (learned) the MVC standard in the right way? [duplicate]

0

/ * 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!

    
asked by anonymous 17.05.2017 / 18:57

1 answer

1

According to the MVC architecture, your model would be correct. You could search by design patterns to have other views about code organization and the project itself. Separate the properties of your model from its methods, connection services, parallel services, and so on.

Since its controller, it should not inherit from a model. They are different things. You will find many discussions about it. You have a recent here

Templates must contain your business rule while Controllers should handle user requests and intermediate view and model.

What I did not understand was this:

  

Consequently I create another file in another folder called   manipulate, where I check the form data and send it to   controller

Why do you send your form to a place that validates and then sends it to the controller? And also: what is the place that validates?

    
17.05.2017 / 19:38