Veja nesse artigo os princípios do FormHelper e suas características na criação dos elementos básicos.

O que é um Helper no CakePHP?

Helpers quer dizer ajudantes e é isso que eles são realmente. Eles nos ajudam a tornar mais fáceis a construção de coisas rotineiras na camada de visualização. Existem diversos helpers que já vem com o Cake e instanciados por padrão, o FormHelper é um desses. Também é possível criar nossos próprios helpers.

O FormHelper.

O FormHelper é responsável pela criação de elementos HTML de formulários (input, select, text...), utilizando funções em PHP de uma maneira simples e de fácil compreensão.

Ele é capaz de criar campos automáticos a partir dos tipos de campos no banco de dados, como vimos anteriormente (//www.devmedia.com.br/views-formhelper-e-actions-introducao-ao-cakephp/24275).

Ele possui uma nomenclatura baseada no model do form e no nome do campo dentro de uma variável data (veremos mais detalhes posteriormente nesse post), o id DOM é composto também pelo nome no form mais o model do campo em CamelCased.

Criando o Formulário

Para criarmos um formulário usando o FormHelper usamos o método create().

FormHelper::create(string $model = null, array $options = array());

Ele não possui parâmetros obrigatórios, pois caso chamemos ele sem nenhum deles ele assumirá algumas configurações padrão como: Metodo de submissão POST, e a Action será a com o nome do arquivo de view onde o form está. Vamos partir da boa prática que você sempre vai passar pelo menos um parâmetro para o form, o nome do model.

Listagem 1: Criando um form.


<?php 
  //view cadastrar.ctp do controller posts
  echo $this->Form->create(“Post”);
  /*<form id=”PostCadastrarForm” method=”post” action=”/posts/cadastrar>*/
?>

Para personalizarmos essas configurações usamos o array options do método, no qual podemos dizer qual será a action, definir o tipo de envio, id, funções de validação, etc.

Listagem 2: Personalizando o formulário.


<?php 
  //view cadastrar.ctp do controller Posts
  echo $this->Form->create(
    “Post”,
    array(‘url’=>action(‘controller’=>’posts’,’action’=>’cadastrar’),’id’=>’FrmPost’
  )
);
?>

Fechando o Form

Para fecharmos o formulário usamos o método end($options = null). Ele recebe como parâmetro um array de opções, nada, ou simplesmente um label. Por padrão é o tipo submit.

Listagem 3: Fechando o formulário


<?php 
  //view cadastrar.ctp do controller Posts
  echo $this->Form->create(
    “Post”,
    array(‘url’=>action(‘controller’=>’posts’,’action’=>’cadastrar’),’id’=>’FrmPost’
  )
);
//elementos devem fica entre esses dois metodos
echo $this->Form->end(‘postar’);//geralmente usamos apenas com o label
?>

Criando elementos

Para criarmos os elementos do form usaremos basicamente o método input(), pois com ele podemos criar quase todos os tipos de elemento.

FormHelper::input(string $fieldname,$options=null);

A criação de todos os elementos parte do mesmo principio, vejam:

Listagem 4: criando um input de tipo text.


//abertura do form
echo $this->Form->input(‘titulo’);
/*caso o campo seja de outro model deve-se usar Model.fieldname*/
/*
A saída será.
<div class="input">
<label for="PostTitulo">Titulo</label>
<input name="data[Post][titulo]" type="text" value="" id="PostTitulo" />
</div>
*/
//fechamento do form

Todos os elementos básicos seguem esse mesmo padrão, precisando apenas passar o segundo parâmetro. Veja como ficaria um elemento do tipo select.

Listagem 5: Criando um elemento select.


echo $this->Form->input(‘sexo’,
 array(
  ‘type’=>’select’,
  ‘options’ => array(‘M’=>’Masculino’,’F’=>’Feminino’),
  ‘label’ =>’Selecione o sexo’
  /*aqui também podemos chamar os atributos comuns de HTML inclusive os eventos de Javascript*/
 )
);

Na listagem anterior eu usei a opção label, ela está disponível para todos os tipos, se não setarmos essa posição então o conteúdo do label será o mesmo nome do campo.Outra opção útil seria a empty(boolean) ele define se o primeiro elemento deve ser vazio ou não, por padrão a primeira opção do array options é o que aparece.

O atributo ‘value’ aparece em quase todos os elementos, usamos da mesma maneira que no HTML setando um valor padrão.

Dessa mesma forma podemos criar os elementos tipo radio, checkbox e textarea. Todos terão uma saída muito parecida. Veja suas chamadas e algumas particularidades:

Listagem 6: Radio, checkbox e textarea.


<?php 
//textarea
echo $this->Form->input('textarea', array(‘type’=>’textarea’,'rows' => '5', 'cols' => '5'));
//radio
echo $this->Form->radio('sexo',
 array(‘type’=>’radio’ ‘options’=>array('M'=>'Male','F'=>'Female'),’value’=>’M’));
//checkbox
echo $this->Form->input('ativo', array(‘type’=>’checkbox’,’label’=>”Deixe marcado para ativar”));
?>

Esses são apenas os métodos mais básicos com suas chamadas mais básicas. Para descrever e entender tudo, certamente levaríamos um bom tempo. Ainda assim, aqui está um link caso vocês queiram ter acesso a maiores informações e para consultar quando estiverem num desenvolvimento mais avançado http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html.

Obrigado, deixem seus comentários e até a próxima.