Duvida referente a MVC no PHP

Boa tarde a todos.

Estou com uma duvida cruel, que tive no NodeJS ( e ainda tenho ), e no PHP tambem. E venho tentar entender de uma vez isso, pelo menos no PHP, mas acredito que se apliquei a todas linguagens ( ou não? ).

Minha duvida é referente ao MVC. Vou tentar fazer a pergunta o mais simples o possivel para ser mais facil de conseguirem me responder.

Essa é a forma que vejo o MVC atualmente, pelo menos o que esta na minha cabeça.

Model = ?
Controller = Controla o dado e entrega para a View.
View = Mostra o resultado final na web.

Então atraves de pensamentos e longas refletidas sobre o assunto, imaginei que o unico possivel papel do Model seria como se fosse um INPUT, atraves dele que entra os dados. por exemplo:

Model = INPUT
Controller = Processo de trabalho sobre o INPUT
View = OUTPUT

Essa minha ideia sobre o MVC está correta? ou totalmente errada? Fico no aguardo.

Resumidamente da maneira mais simples o conceito sobre MVC: https://www.caelum.com.br/apostila-java-web/mvc-model-view-controller/#9-4-melhorando-o-processo

Não achei simples >.<, talves falte bagagem então antes de eu começar a aprender sobre MVC.

Hahahaha mas agradeço a intenção.

Fica mais fácil quando a gente pensa assim: tudo o que está em contato com o usuário é view (html, css, javascript, relatórios, imagens, etc).

É fato que o php não possui servlets, talvez isso tenha te deixado confuso.
Você pode entender o controller como sendo o responsável por verificar quem vem, de onde vem, o que traz e para onde vai.

Tudo aquilo que modela o sistema, implementa lógica e acessa bases de dados está no modelo.
Ficou mais fácil?

Opa Luis obrigado pela ajuda.

Então cara ficou um pouco de duvida apenas no Model.

Exemplo: Se eu crio uma classe no PHP, que conecta com o DB, e criar umas funcoes de adicionar algo e deletar etc dentro dessa classe, isso seria um Model correto?

Porem, apenas consigo enxergar esse caso hahah =(. Não consigo enxergar o que mais na minha aplicação poderia ser um MODEL.

Agradeço a ajuda novamente cara. E desculpa se é um assunto muito simples e eu que estou sendo ignorante no assunto.

Vamos tentar deixar isso mais claro.
O model é uma camada, ela pode ser subdividida em várias.
O elemento mais fundamental de um sistema é seu modelo.
Por exemplo, quando você tem um simples cadastro de clientes, com nome, telefone e data de aniversário. Você cria uma classe que represente todos os clientes

<?php
        class Cliente {
            var $nome;
            var $email;
            var $aniversario;
            //Métodos omitidos por que eu quis
        }
?>

É a partir dele que você vai criar todo o resto do sistema.
Muita gente discute se um DAO é uma boa ou má prática (e o uso de entidades anêmicas também).
Eu não tenho nada contra tal abordagem.

<?php
class ClienteDAO {
    public function insertClient($cliente) {
    //Aqui faz algo
    }

    public function listarClientes() {
        //Aqui faz outro algo
    }
}
?>

Estas duas classes estarão na camada modelo (model).
Mais claro?

1 curtida

A camada de controle vai identificar quem está solicitando e quem irá tratar a ação. Isso é mais comum quando se utiliza frameworks (como o laravel, que precisa que se configure rotas para cada requisição).
Normalmente, quando não se faz uso de frameworks como o laravel, codeigniter, cakephp e etc, você acaba criando um arquivo de controle para cada view (ou para mais de uma view).
É até difícil colocar um código que siga a orientação a objetos (primeiro por que eu quase nunca desenvolvi em PHP OO) para exemplificar, afinal, quando você cria um formulário qualquer, acaba apontando ele (setando o valor da propriedade action da tag form) para um arquivo com a extensão php.
Mas, digamos que temos o arquivo abaixo:

<?php
require('../model/Cliente.class.php');
require('../model/dao/ClienteDAO.class.php');

$clienteDAO = new ClienteDAO();
$cliente = new Cliente();

if(isset($_POST['nome']) && isset($_POST['email']) && isset($_POST['aniversario']) {
    //Executa a lógica aqui
}
?>
1 curtida

E a view você já conhece, é o html ou mesmo um php que assume a responsabilidade de interagir com o usuário:

<html>
<!-- head e outras tags omitidas -->
<body>
    <form action="arquivoController.php">
        Nome: <input type="text" name="nome"/><br/>
       Email: <input type="text" name="email"/></br>
      Aniversário: <input type="text" name="aniversario"/><br/>
     <input type="submit" value="Gravar"/>
  </form>
</body:
</html>

Entendeu?

1 curtida

Olha… explicação PERFEITA.

Muito obrigado agora deu uma boa clareada, entendi o funcionamento, e percebi que eu estava errado então na minha primeira ideia de como seria o MVC.

Muito obrigado mesmo Luis_Augusto_Santos =), vou até mostrar esse post para alguns amigos meus da faculdade que estavam com a mesma duvida.

Se tiver oportunidade (e interesse em aprender mais sobre mvc em php) sugiro fortemente estudar laravel.
Eu tive pouco contato (comprei um livro da casa do código).
Embora o framework em si torne várias coisas mágicas (entenda mágica como coisas que funcionam sem você saber direito como), ele é um framework simples, fácil e intuitivo.
Se quiser saber mais sobre padrões de projetos em si, pesquise por GoF. Depois, pode ir além e pesquisar padrões não GoF.

Então cara to aceitando qualquer dica de estudos, eu sou da area de Front, e estou tentando passar para o Back com php. Então por enquanto meu conhecimento de PHP é o basico da linguagem, e algumas tecnicas que meu chefe ( atual back da empresa ) vai me ensinando se segurança contra SQL injection etc…

Mas sou PATINHO DE BORRACHA ainda. Acha que vale a pena ir para um framework? Uma vez cogitei isso, pois um framework por ser mais amigavel para o iniciante acabaria mostrando mais facilmente o PODER e possibilidades do PHP.

O que acha Luis? ou me aprofundo mais no PHP antes?

Bom, eu sugiro que você comece pelo PHP puro mesmo. Quando você estiver seguro, tranquilo, aí sim, parte para um framework.
Como eu disse, o laravel, por exemplo, faz muita coisa “mágica” (não conheço outros frameworks PHP, mas, provavelmente, façam parecido). É óbvio que isso não é de todo ruim, ajuda muito. Mas, se ocorrer algum erro fora do comum, como você vai tratar?
É extremamente importante conhecer a linguagem para depois utilizar seus recursos.

Concordo, anotado então Luis e valeu pela ajuda com o MVC, ajudou d+ =).