+14

Programar de forma Hierárquica

criado por Rubens Takiguti Ribeiro em 24/11/2009 7:54pm
A mesma idéia aplicada em $_SESSION pode ser aplicada a outros elementos. Por exemplo, para as variáveis superglobais $_GET e $_POST. Quando montamos um formulário que envia muitos dados, e envolvem atributos de diferentes entidades da aplicação, pode ocorrer de um mesmo nome de atributo ser igual para duas entidades. Para realizar a diferenciação, vamos hierarquizar o formulário também.

Vamos supor um formulário que pretende-se cadastrar um usuário e o nome de um livro ao mesmo tempo (duas entidades diferentes no mesmo formulário). Vamos supor, também, que tanto usuário quanto livro possui o atributo "nome". Um formulário que contorna este problema ficaria assim:

<form method="post" action="...">

  <fieldset>
    <legend>Dados de Usuário</legend>
    <p>
      <label for="usuario-nome">Nome:</label>
      <input name="usuario[nome]" id="usuario-nome" type="text" value="..." />
    </p>
    <p>
      <label for="usuario-senha">Senha:</label>
      <input name="usuario[senha]" id="usuario-senha" type="password" />
    </p>
  </fieldset>

  <fieldset>
    <legend>Dados do Livro</legend>
    <p>
      <label for="livro-nome">Nome:</label>
      <input name="livro[nome]" id="livro-nome" type="text" value="..." />
    </p>
    <p>
      <label for="livro-edicao">Edição:</label>
      <input name="livro[edicao]" id="livro-edicao" type="texto" value="..." />
    </p>
  </fieldset>

  <p><input type="submit" value="Enviar" /></p>

</form>

Observe que foi utilizado colchetes nos names dos campos. Desta forma, o PHP coloca os dados no vetor $_POST de forma hierárquica. Por exemplo, para obter o nome do usuário seria acessada a posição $_POST['usuario']['nome'], enquanto que para obter o nome do livro teriamos que acessar $_POST['livro']['nome'].

Colocar prefixos também funciona, porém, para realizar algumas operações mais genéricas com PHP, provavelmente será interessante manter o nome original do atributo. Opcionalmente, é possível criar uma classe que constrói formulários e define um ID único para cada campo, de forma que mesma classe consiga devolver, de forma hierárquica, os nomes utilizados no formulário. Enfim, realizar um mapeamento a um nível de objeto.

Comentários:

Mostrando 1 - 10 de 11 comentários
AndersonSilva disse:
Ótimo Artigo sobre hiarquia, estou aprendendo sobre o mesmo e estou postando todos os conteudos da faculdade no site http://www.baixafree.com.br
Obrigado!!!!
20/01/2013 4:42am (~5 anos atrás)

Marcos disse:
a idéia é usar MVC, no entanto, acredito que os Frameworks lhe deixam limitados a ele.Interessante escrever o próprio Framework, fica mais ao seu gosto.
01/01/2013 5:35pm (~6 anos atrás)

Jefrey disse:
para ajudar eu faço um mapa mental com o mindmeister.com e coloco em ordem os ítens do site.
09/12/2010 8:06pm (~8 anos atrás)

Jefrey disse:
para ajudar eu faço um mapa mental com o mindmeister.com e coloco em ordem os ítens do site.
09/12/2010 8:06pm (~8 anos atrás)

Marcelo Iwata disse:
Legal..
Recomendo a quem quer esmiuçar o MVC sob a perspectiva de um Gerenciador de Conteúdo estude a estrutura do Joomla e seus módulos e componentes.
09/12/2010 3:51pm (~8 anos atrás)

PARABÉNS E COMO O COLEGA FALOU, ME LEMBRA OS MEUS PRIMEIROS PROJETOS NA FACULDADE.
04/12/2010 6:22pm (~8 anos atrás)

Luiz Tarabal disse:
Muito bom o artigo.
25/11/2010 2:23am (~8 anos atrás)

Amigo, muito explicativo o artigo, parabéns pela iniciativa!
18/11/2010 4:57pm (~8 anos atrás)

Muito bacana. E é engraçado quando eu li as suas primeiras palavras e lembrei dos meus primeiros sistemas, meses atrás, com absolutamente tudo jogado numa pasta qualquer.
17/11/2010 12:27am (~8 anos atrás)

Excelente artigo, parabéns
15/11/2010 11:48am (~8 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)