9.3 – Helper
Você não pode mudar o vento, mas pode ajustar as velas do barco para chegar onde quer
Confúcio
Os helpers contém código de apresentação que são compartilhados entre muitas views, elements ou layouts.
Veja a relação de helper nativos do CakePHP 3:
Carregamos Helpers no Cake declarando em classes views.
src\View
Class AppView extends View
{
public function initialize()
{
parent::initialize();
$this->loadHelper('Html');
$this->loadHelper('Form');
$this->loadHelper('Flash');
}
}
Usando o helper
Também podemos usar o método beforeRender() dos controllers para carregar Helpers.
class ArticlesController extends AppController
{
public function beforeRender(Event $event)
{
parent::beforeRender($event);
$this->viewBuilder()->helpers(['MeuHelper']);
}
}
Criando Helpers
Podemos criar classes Helper para usar em aplicações ou em plugins.
Os Helpers têm algumas convenções que nos ajuda se as seguirmos:
- Arquivos de classe Helper devem ficar em src/View/Helper. Exemplo:
src/View/Helper/MeuHelper.php
- Classes helpers devem ser sufixadas com Helper. Exemplo:
MeuHelper
- Quando referenciar classes helper deve omitir o sufixo Helper:
$this->loadHelper('Meu');
Criando o esqueleto de um Helper chamado Mensagem com o bake:
cd /var/www/html/cliente
bin/cake bake helper Mensagem
Editar o src\View\Helper\MensagemHelper.php e adicionar a função msg(), assim:
<?php
namespace App\View\Helper;
use Cake\View\Helper;
use Cake\View\View;
class MensagemHelper extends Helper
{
protected $_defaultConfig = [];
public function msg($msg)
{
return '<h2>'.$msg.'</h2>';
}
}
Usando o Helper
Editar a view index.ctp e adicionar em algum lugar:
<?=$this->Mensagem->msg('Minha Mensagem Helper') ?>
Ao chamar no navegador verá a mensagem com título h2.
Um helper bem simples para mostrar o caminho das pedras.
Máscaras no CakePHP
- Máscara na view index para o campo CPF
Enquanto não descubro uma função do Cake que faz isso...
O CPF é um campo texto mas constituido somente de números. A listagem (index.ctp) mostra a relação de números sem nenhuma formatação. Ajudaria se formatassemos usando uma máscara adequada para CPF, ajudaria a visualizar.
Vamos fazer isso agora para a view Clientes/index.ctp:
Substitua a linha
<td><?php echo h($cliente['Cliente']['cpf']); ?> </td>
Por este código:
<tbody>
<?php foreach ($customers as $customer): ?>
<?php
$cpfmask1 = substr($customer->cpf, 0,3);
$cpfmask2 = substr($customer->cpf, 3,3);
$cpfmask3 = substr($customer->cpf, 6,3);
$cpfmask4 = substr($customer->cpf, 9,2);
$cpfmask = $cpfmask1.'.'.$cpfmask2.'.'.$cpfmask3.'-'.$cpfmask4;
?>
<tr>
<td><?= $this->Number->format($customer->id) ?></td>
<td><?= h($customer->name) ?></td>
<td><?= h($customer->birthday) ?></td>
<td><?= h($cpfmask) ?></td>
Com isso a listagem mostrará o CPF com a sua máscara.
Caso existam registros eles não serão alterados, apenas os novos.
Dicas sobre data e hora
Ano mínimo sendo 16 anos antes do atual e máximo sendo 100 anos antes do atual em actions add e edit
echo $this->Form->input('nascimento',['label' => 'Nascimento',
'dateFormat' => 'DMY',
'minYear' => date('Y') - 100,
'maxYear' => date('Y') - 16,
'empty' => [
'day' => 'Dia',
'month' => 'Mês',
'year' => 'Ano'
]
]);
Detalhes em:
http://book.cakephp.org/3.0/en/views/helpers.html
Comments fornecido por CComment