Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AnthraxisBR

Dúvida sobre MVC -> View

Recommended Posts

Bom dia,

 

A dúvida é a seguinte:

 

Estou desenvolvendo um projeto em PHP + MySQL + HTML + CSS + jQuery utilizando MVC, minha dúvida está relacionada a onde o jQuery se encaixa, hoje estou tratando assim:

 

jQuery:

jquery.system.api.js -> Efetua os eventos e ações envio.

jquery.system.funcs.js -> Armazena funções que podem ser chamadas mais de uma vez, exemplo: uma função que inclui mascaras nos campos.

jquery.system.visual.js -> Acima dos mesmo eventos da system.api, mas apenas nas mudanças visuais que os eventos devem causar.

 

Estrutura de pastas de uma parte:

 

index.php

callFunctions.php

 

/view/geral/geral_list_users.php -> A minha dúvida está aqui!!!!

 

/view/class.geralView.php

/controller/class.geralController.php

/model/class.geralModel.php

/js/arquivos.js

 

A dúvida é:

 

Eu chamo o controller através do callFunctions, na classe Controller eu digo o que o model deve fazer -> Buscar os usuário no BD, e passo a array com o resultado para a classe do View, DUVIDA:

 

Dentro do view eu apenas pego o valor da array, incluo o arquivo geral_list_users.php e faço a listagem dentro desse arquivo, ou seja, uso a classe do View apenas pra incluir o arquivo, está correto isso? seria errado remover essa classe e incluir direto a lista pelo Controller ?

 

E por fim, onde o jQuery fica no MVC ? minha divisão está correta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um projeto Web MVC é diferente dos projetos que existiam na época em que o MVC foi concebido.

 

Na prática, o MVC da Web deve ser divido em dois MVCs:

  • MVC do Back-End;
  • MVC do Front-End.

O MVC do back-end é puramente PHP e baseado em requisições. Nenhuma outra linguagem irá realizar nada no back-end, apenas PHP. Ou seja:

  • Controller: receberá a requisição HTTP e realizará as tarefas a ele pertinentes;
  • Model: será consultado pelo controller, caso necessário, e tratará todas as informações lógicas e de negócio. Poderá consultar um storage se necessário.
  • View: irá gerar todo e qualquer output gerado pelo PHP. Precisa realizar um echo/print? Irá exibir em browser (HTML) ou em linha de comando (texto puro)? É na View.

Uma vez que a View do back-end gerou o HTML, inicia a etapa do MVC do front-end. Esse, por outro lado, é baseado em evento e dividido em algumas linguagens (HTML + CSS + JavaScript). Sendo que a única linguagem de programação é o JavaScript.

 

Nessa caso, o cenário é um pouco mais complexo que no back-end. Para tanto, é melhor iniciar pela View:

  • View: é tudo que o usuário pode visualizar. É o composto entre HTML + CSS (que pode ser modificado por JavaScript). Diferentemente do PHP, que espera uma requisição, este espera um evento (seja clicar em botão, passar o mouse sobre algum elemento, apertar uma tecla, etc...). Quando um evento é disparado, ele pode possuir um dos quatro tratamentos abaixo (não limitado a somente um):
    • Ser capturado pelo HTML: Clicar em um link, submeter um formulário, digitar em text box. São todos os eventos "nativos" ou "padrões" do HTML.
    • Ser capturado pelo JavaScript: Quando é adicionado um event listener, o JavaScript interceptará o evento e poderá personalizar a ação que deverá ser tomada (veremos mais na parte de controllers).
    • Ser capturado pelo CSS: São os eventos que o CSS toma controle (:hove, :active, :visited, etc..). São bem limitados, e o controle fornecido é puramente visual;
    • Não acontecer nada: é, de longe, o evento mais disparado. Clickou em um área em branco, movimentou  o mouse pelo site, rolou um scroll. Acredite, tudo isso é um evento que não possui um listener.
  • Controller: puramente JavaScript. São os listeners adicionados através do JavaScript. Assim como o PHP está esperando uma requisição, o JavaScript espera um evento. Uma vez caputrado, pode-se atribuir novas operações (gerar uma requisição, modificar o HTML/CSS, consultar regras de negócio) ou evitar que uma ação seja realizada (impedir o click em um link ou envio de um formulário).
  • Model: puramente JavaScript. Igual ao PHP, é aonde estarão as regras de negócio. Pode-se utilizar para executar validações de negócio, requisições assíncronas (AJAX), consultar algum storage local (localStorage, cookies, etc..). Da mesma forma que o PHP realizaria, com a diferença de ser no front-end.
Em 07/04/2017 at 10:34, AnthraxisBR disse:

E por fim, onde o jQuery fica no MVC?

 
 

jQuery é uma biblioteca, escrita em JavaScript, que pode ser utilizada pelo MVC do Front-End (Controller e Model) e faz parte da View do Back-End.

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 minutos atrás, Gabriel Heming disse:

jQuery é uma biblioteca, escrita em JavaScript, que pode ser utilizada pelo MVC do Front-End (Controller e Model) e faz parte da View do Back-End.

 

Obrigado pela resposta, muito bom esse texto.

 

Mas estou com uma outra dúvida que na verdade acho que já foi respondida nesse texto, porém mesmo assim prefiro confirmar:

É errado usar o Controller pra incluir realizar alguma coisa -> EX: receber uma array e incluir um arquivo que use essa array ?

Porém esse arquivo incluído não é classe, apenas um pagina com while($line = mysqli_fetch_array($rs) { // coisas listadas}.

Ou pra ficar no modo correto, eu realmente tenho que usar um função da classe view relacionada pra fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A reposta mais depende de qual é a finalidade de manipular esse array. Talvez o texto do link abaixo pode lhe esclarer:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, Gabriel Heming disse:

A reposta mais depende de qual é a finalidade de manipular esse array. Talvez o texto do link abaixo pode lhe esclarer:

 

 

Deu pra entender sim, o que eu estava me confundindo era que o view tem que necessariamente não tratar nada e receber tudo pronto.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um erro bastante difundido, pois, alguns dos templates builder disponíveis, trabalham dessa forma. Ou seja, exigem que os dados venham tratados e sejam apenas scalares.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido: Ambientes de Desenvolvimento -> Arquitetura e Métodos Ágeis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas para deixar um ponto claro, algo que as pessoas confundem:

 

- MVC não é tecnologia propriamente dita é a maneira de como cria/organiza

- MVC não depende de frameworks e nem orientação a objetos

- MVC veio antes da Web (junte isto ao item 1)

 

Na documentação da Apple existe alguns "guias" de como usar MVC, ou seja é algo que é voltado para aplicações Desktop e Mobile (claro que existe muito mais coisas que o SDK deles permitem, como extensões do Safari):

 

Conceptual/DevPedia-CocoaCore/MVC

Conceptual/DevPedia-CocoaCore/ModelObject

Conceptual/DevPedia-CocoaCore/ControllerObject

 

Sei que parece que fugi do assunto "aonde jQuery se encaixa nisto", mas na verdade estou querendo dizer que o MVC é apenas uma maneira de organizar e pode ser totalmente opcional, sendo muitas vezes (muitas mesmo) usada sem necessidade, ainda mais em páginas web simples, aonde o método de organização poderia ser algo mais simplório e objetivo.

 

Então para exemplificar o jQuery não fica em uma camada do MVC, ele simplesmente é uma lib como o Gabriel citou, o que você organiza será o "MVC".

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de validação de INPUT com função moeda.
       
      Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56
      o problema é quando precisa atualizar o valor.
       
      Quando o usuário atualizar o input fica assim: 1.234,
       
      como faço para atualizar as casas decimais, conforme o valor for sendo alterado ?
       
      o input está assim:
       
      <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div>  
      a função para formatar o input para moeda está assim:
      obs.: a Função CalcProd está executando corretamente
      function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de validação de INPUT com função moeda.
       
      Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56
      o problema é quando precisa atualizar o valor.
       
      Quando o usuário atualizar o input fica assim: 1.234,
       
      como faço para atualizar as casas decimais, conforme o valor for sendo alterado ?
       
      o input está assim:
       
      <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div>  
      a função para formatar o input para moeda está assim:
      obs.: a Função CalcProd está executando corretamente
      function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Desculpa postar minha dúvida, fiz várias pesquisa mas não tive sucesso.
       
      Como faço para capturar o ID do SELECT selecionado e passar para base_url ?
       
      Exemplo:
      após selecionar o ID passar para <?php echo base_url();?>estoque/ajuste/adicionar/ <== passar o ID aqui.
       
      <div class="col-md-6"> <label for="tipoDepart" class="control-label">Departamento:</label> <select name="tipoDepart" id="tipoDepart" style="width:100%;" class="form-control"> <option value="">Selecione um Departamento</option> <?php foreach ($dprts as $dp) { echo '<option value="'.$dp->idDepartamento.'">'.$dp->departamento.'</option>'; } ?> </select> </div> <div class="col-md-6"> <div class="card card-entrad"> <div class="card-header"> <label class="card-tlentr">Entrada - Estoque</label> </div> <div class="card-body"> <div style="text-align:center;"> <a href="<?php echo base_url();?>estoque/ajuste/adicionar/" <== COMO PASSO O ID SELECIONADO AQUI, PARA ABRIR A PÁGINA COM O ID DO DPTO ? class="btn btn-cinza">Adicionar</a> </div> </div> </div> </div>  
      Observação: preciso capturar e passar o ID para gerar TABELA referente a cada departamento.
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Tem como passar para o Formulário um Campo vindo via AJAX no formato moeda ?
       
      Tenho uma rotina onde o usuário escolhe através de uma Lista na modal de Produtos e o sistema informa o formulário os seguintes campos:
      código | descrição | espécie | estoque atual.
       
      o estoque atual preciso passar nesse formato, para validação de quantidade: 15.00 ou 15,00.
      ou seja:
      converter de: 15 
      para: 15.00 com casas decimais

      tem como fazer isso ?
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Tem como passar para o Formulário um Campo vindo via AJAX no formato moeda ?
       
      Tenho uma rotina onde o usuário escolhe através de uma Lista na modal de Produtos e o sistema informa o formulário os seguintes campos:
      código | descrição | espécie | estoque atual.
       
      o estoque atual preciso passar nesse formato, para validação de quantidade: 15.00 ou 15,00.

      tem como fazer isso ?
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.