Dev (Back & Front)ARTIGO

Classe genérica para formulários – Parte 01

Hoje iniciaremos uma série de artigos que abordam a criação de uma classe php totalmente orientada a objeto para geração de formulários. Porém, antes vamos observar brevemente as características do form, seus atributos e elementos adicionais.

Os formulários HTML são estruturas que permitem a usuários submeterem dados a uma página. Esses dados podem ser tratados e/ou armazenados dependendo da aplicação. Possuem uma tag de abertura e outra de fechamento, inserindo os elementos adicionais entre essas duas.

Estrutura:<br /><form (atributos/valores)> (elementos) </form>

Atributos:

  • accept
  • accept_charset
  • action
  • method
  • enctype
Elementos Adicionais:<br />- input - <input (atributos/valores) /><br />- option - <option (atributos/valores)> (nome) </option><br />- select - <select (atributos/valores)> (elemento option) ou (elemento optgroup) </select><br />- textarea - <textarea (atributos/valores)> (texto) </textarea><br />- button - <button (atributos/valores)> (nome) </button><br />- label - <label (atributos/valores)> (rótulo) </label><br />- fieldset - <fieldset (atributos/valores)> (elemento legend [opcional] ) (elementos) </fieldset><br />- optgroup - <optgroup (atributos/valores)> (elemento option) </optgroup>

Com base nessas informações, iniciaremos a construção de nossa classe genérica.

Criação da classe commons (comum), attribute (atributo) e element (elemento)

O primeiro passo será a criação das classes genéricas, ou seja, as classes que serão utilizadas como extensões para as demais classes. A classe commons será responsável pelos métodos __set() e __get(). A classe attribute será a instância de nossos atributos e, por fim, a classe element manipulará essas instâncias de attribute.

Class commons

Definiremos a classe commons como abstrata (abstract), pois ela não deve ser instanciada, servirá apenas de apoio para as demais. Adicionamos então dois métodos de interceptação (intercepções – conceito introduzido no PHP5), o método __set() e __get().

O método __set() interceptará a atribuição de valores a propriedades do objeto. Assim, sempre que for atribuído um valor a uma propriedade do objeto, automaticamente essa atribuição passará pelo método __set().

O método __get() interceptará requisições de propriedades do objeto. Assim, sempre que for requisitada uma propriedade, automaticamente essa requisição passará pelo método __get().

abstract class commons {<br /> function __set( $property,$val ) {<br />  $this->$property = $val;<br /> }<br /> <br /> function __get( $property ) {<br />  return $this->$property;<br /> }<br />}

Class attribute

A classe attribute será uma extensão da classe commons, herdando os métodos __set() e __get(). Definimos também a mesma como final. Adicionamos duas variáveis, attribute e value, responsáveis por guardar o nome do atributo e seu valor. Então incluímos o método construtor __construct() que atribuirá o valor de attribute e value na criação do objeto, caso seja passado algum valor.

final class attribute extends commons {<br /> protected $attribute;<br /> protected $value;<br /> <br /> function __construct( $attribute,$value ) {<br />  $this->attribute = $attribute;<br />  $this->value = $value;<br /> }<br />}

Class element

A classe element será uma extensão da classe commons e abstrata (abstract). A função desta classe será manipular os objetos attribute, para isso adicionaremos três métodos: addAttribute, hasAttributes e getAttributes.

Como o próprio nome já descreve, o método addAttribute adicionará na array attributes uma instância do objeto attribute. A palavra attribute antes de $attribute descreve que a variável recebida deverá ser um objeto attribute. hasAttributes tem a finalidade de verificar se a array attributes possui filhos, retornando um booleano.

Por fim, o método getAttributes percorre os atributos contidos na array attribute e os transformam em uma string plana para serem adicionados mais tarde aos elementos. Definimos também o método draw como abstrato (abstract), obrigando as subclasses que herdarem element a implementar draw().

abstract class element extends commons {<br /> protected $attributes;<br /> <br /> final public function addAttribute( attribute $attribute ) {<br />  $this->attributes[] = $attribute;<br /> }<br /> <br /> final public function hasAttributes() {<br />  return count( $this->attributes ) > 0;<br /> }<br /> <br /> final public function getAttributes() {  <br />  $elementAttributes = '';   <br />  foreach( $this->attributes as $attribute ) {<br />   $elementAttributes .= "{$attribute->attribute}=\"{$attribute->value}\" ";<br />  }<br />  return $elementAttributes;  <br /> }<br /> <br /> abstract function draw();  <br />}

Na segunda parte da série de artigos, vamos iniciar a construção dos elementos. Espero vocês. Até a próxima!

trabalha com Design Gráfico e Web desde 2004. Desenvolve projetos com ferramentas de gestão de conteúdo e atualmente atende clientes de vários segmentos pela P3 Comunicação.

Ver perfil