+9

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 - 9 de 9 comentários
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 (~1 ano atrás)

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 (~1 ano 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 (~1 ano atrás)

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

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

Amigo, muito explicativo o artigo, parabéns pela iniciativa!
18/11/2010 4:57pm (~1 ano 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 (~1 ano atrás)

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

O maior exemplo dessa hierarquia funcionar são os frameworks, imagine a "zona" que seriam eles sem utilizar hierarquia.
30/09/2010 8:32am (~1 ano atrás)

Novo Comentário:

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