Helpers
O Helpers no CakePHP existe principalmente para ajudar a acelerar o desenvolvimento de suas
visualizações. Existem helpers para HTML, Ajax, JavaScript e mais. O Helpers facilita a inserção de partes de
código HTML que você se pega gravando várias vezes.
Modificando o Arquivo users_controller.php
Para começar a utilizar o Helpers, você vai precisar modificar o arquivo users_controller.php criado
anteriormente. Você deve dar um nome ao controlador e dizer a ele que quer utilizar alguns helpers, nesse caso, os
helpers HTML e Formulário. Edite o arquivo para incluir as variáveis de classe $name e $helpers.
Listagem 14. O Controlador de Usuários
<?php
class UsersController extends AppController
{
var $name = 'Users';
var $helpers = array('Html', 'Form' );
function register()
{
...
|
Agora que incluiu seus helpers, você pode começar a utilizá-los.
Facilitando as Tabelas
Os usuários do Tor devem estar preparados para ver quem mais está registrado para utilizar o aplicativo. O
CakePHP possui inúmeros helpers para ajudar você a criar tabelas. Esses helpers incluem várias partes úteis de
funcionalidade, sendo que algumas delas você provavelmente já gravou mais de uma vez.
Para demonstrar essa capacidade, você vai criar uma visualização para exibir usuários registrados.
Criando uma Ação knownusers
Comece criando uma ação knownusers no controlador de usuários.
Listagem 15. Criando uma Ação knownusers
function knownusers()
{
$this->set('knownusers',
$this->User->findAll(null, array('id', 'username', 'first_name',
'last_name'), 'id DESC')
);
}
|
Isso chama a função integrada findAll no modelo de usuário. A função
findAll utiliza um campo contendo condições (nesse caso, você passou condições nulas, que
retornarão todos os usuários), uma array de campos a serem retornados (não queremos todas as informações sobre o usuário,
apenas as que você quer que todos vejam) e um campo de classificação e uma ordem (nesse caso, id DESC para
classificar os campos em ordem decrescente por ID). Também é possível especificar um limite (máximo de linhas a ser retornado),
uma página (se você estiver paginando os dados), uma opção recursiva, que pode ser especificada para retornar modelos associados
aos dados (por exemplo, se você estava consultando uma tabela de grupos e vários usuários pertencerem a cada grupo).
A saída de findAll é colocada na variável knownusers. Os dados
agora podem ser acessados a partir de uma visualização.
Criando a Visualização knownusers
Crie o arquivo app/views/users/knownusers.ctp em um editor de texto. Para ver com que os dados retornados
por findAll se parecem, emita a variável knownusers utilizando var_dump.
Listagem 16. Emissão da Variável knownusers Utilizando var_dump
<pre>
<?php var_dump($knownusers) ?>
</pre>
|
Visite a visualização em http://localhost/users/knownusers. Você deverá ver uma array de dados do usuário.
Figura 7. Os Resultados
Se você tiver apenas um usuário listado, retorne a http://localhost/users/register e registre mais
alguns. O resultado final será mais impressivo.
Conseguiu uma grande array de usuários? Ótimo! Hora de transformá-la em uma tabela.
Substitua o conteúdo de knownusers.thtml pelo seguinte.
Listagem 17. Criando uma Tabela
<table>
<?php
echo $html->tableHeaders(array_keys($knownusers[0]['User']));
foreach ($knownusers as $thisuser)
{
echo $html->tableCells($thisuser['User']);
}
?>
</table>
|
O primeiro auxiliar criará um conjunto de cabeçalhos de tabela a partir de uma array de dados — nesse
caso, a lista de chaves para nossos usuários.
O segundo auxiliar criará um conjunto de células de tabela, envolvido por tags de linha da tabela,
a partir de uma array de dados — nesse caso, os valores para cada usuário.
É isso! Salve-a e acesse http://localhost/users/knownusers para ver os resultados.
Figura 8. Os Resultados
Ao utilizar o auxiliar tableCells, você eliminou a necessidade de gravar
seu próprio código para iteração através da array de dados do usuário. Esse é apenas um exemplo de como utilizar helpers
para facilitar o trabalho com HTML no CakePHP.
Geração de Formulários
Construir um aplicativo da Web sem utilizar formulários é como ordenhar uma galinha: extremamente
complicado e não funciona. Formulários bem construídos e de fácil manutenção são a base para qualquer aplicativo bem
construído.
Dada a frequência com que você vai precisar construir formulários, parece natural procurar formas de tornar o processo mais fácil sem cortar caminho.
Utilizando Helpers no Formulário de Registro
Helpers são úteis principalmente na geração de formulários. Você pode utilizá-los para gerar o HTML
para seus campos de entrada, bem como sinalizadores de substituição para conter mensagens de erro de validação. Utilizando
helpers para gerar os campos de formulário e portadores de mensagens de erro para o Tor, a visualização de registro pode
ser muito mais parecida com a Listagem 18.
Listagem 18. Utilizando Helpers para Gerar o Formulário de Registro
<p>Please fill out the form below to register an account.</p>
<?php echo $form->create('User', array('action' => 'register'));?>
<?php
echo $form->input('first_name');
echo $form->input('last_name');
echo $form->input('username');
echo $form->input('email');
echo $form->input('password');
?>
<?php echo $form->end('Register');?>
|
Como você pode ver, fazer uso dos helpers do CakePHP pode economizar um pouco do seu código durante
a gravação de elementos do formulário básico. Agora vamos dar uma olhada em como fazer uso de seus helpers.
Tirando o Máximo Proveito dos Helpers
Para começar a extrair mais lucros dos helpers, você vai precisar fazer duas coisas: atualizar
o controlador de usuários e introduzir um pouco de validação de dados.
Abra controllers/users_controller.php e altere a função do registro para corresponder a da Listagem 19.
Listagem 19. Atualizando o Controlador de Usuários
function register()
{
if (!empty($this->data))
{
if ($this->User->save($this->data))
{
$this->Session->setFlash('Your registration information was accepted.');
}
}
}
|
Observe que as ocorrências de $this->params['form'] mudaram para $this->data.
Agora abra o modelo de usuário e inclua um pouco de validação de dados (coberta com detalhes mais
adiante). Por enquanto, modifique seu modelo de usuário para que ele fique parecido com o da Listagem 20.
Listagem 20. Modificando Seu Modelo de Usuário
<?php
class User extends AppModel
{
var $name = 'User';
var $validate = array(
'username' => VALID_NOT_EMPTY,
'password' => VALID_NOT_EMPTY,
'email' => VALID_EMAIL
);
}
?>
|
Analisando tudo isso rapidamente, a array $validate contém entradas para
validação, que consistem em uma chave (o nome do campo de formulário) e em uma expressão regular utilizada para avaliar
os dados. Não é necessário validar todos os campos de formulário. Na Listagem 20, last_name e
first_name foram
deixados como opcionais. O CakePHP é fornecido com várias expressões regulares predefinidas para validação de dados.
VALID_NOT_EMPTY é utilizada para garantir que o campo não está vazio. VALID_EMAIL é
utilizada para verificar se uma cadeia se parece mais ou menos com um endereço de e-mail.
Agora vamos fazer um teste. Tente enviar o formulário sem dados, com um ou dois campos obrigatórios
vazios, com um endereço de e-mail inválido. O que você vê?
Figura 9. Primeira Tentativa de Validação de Dados
Agora tente uma segunda vez, deixando dados diferentes ausentes.
Figura 10. Segunda Tentativa de Validação de Dados
Uma coisa que você deve observar é que o CakePHP está ativando e desativando suas mensagens de erro
on the fly. Outra coisa que você vai observar é que o CakePHP está se lembrando e preenchendo os valores dos campos de
formulário sem você precisar fazer nada.
É aqui que está a grande vantagem. Por que você não teve que fazer nada?
Primeiro, você não precisou dizer aos campos de formulário para preencher novamente suas informações a
partir da array _POST.
O CakePHP fez isso por você. Você não precisou verificar a existência de erros em cada campo e exibir condicionalmente cada
mensagem de forma individual. O CakePHP fez isso por você. Você não precisou se certificar de ter formatado suas tags em um
xhtml válido. O CakePHP também fez isso por você.
Notas sobre o Helper
Este tutorial examina superficialmente os helpers. Um tutorial inteiro poderia ser escrito sobre
este assunto. Saber utilizar bem os helpers envolve um longo percurso para ajudá-lo a acelerar seu desenvolvimento no
CakePHP.
O CakePHP inclui helpers para Ajax (utilizando prototype.js), JavaScript, conversão de números, manipulação de texto,
datas, horas e mais. Revise o manual (consulte Recursos) para se familiarizar com alguns
desses helpers.
|