Don't you speak portuguese? Translate this site with Google Translator

Pensamento do Dia

Um livro é um mudo que fala, um surdo que responde, um cego que guia, um morto que vive. (Padre António Vieira)

9.3 - Helper

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:

Breadcrumbs

Form

Html

Number

Paginator

Rss

Session

Text

Time

Url

 

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']); ?>&nbsp;</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

Novo Testamento

E ninguém seja devasso, ou profano, como Esaú, que por uma refeição vendeu o seu direito de primogenitura.
(Hb, 12:16)

Rotas no Mapa do Google

© 2015 Ribamar FS. All Rights Reserved. Designed By JoomShaper