Duvida referente a MVC no PHP

12 respostas Resolvido
A

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.

12 Respostas

Jonathan_Medeiros

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

A

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.

L

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?

A

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.

L
Solucao aceita

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?

L

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
}
?>
L

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?

A

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.

L

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.

A

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?

L

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.

A

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

Criado 21 de março de 2017
Ultima resposta 23 de mar. de 2017
Respostas 12
Participantes 3