CakePHP - criando helpers

Friday, 03 - 10 - 2008

em muitos casos é necessario replicar o mesmo trecho de código nas views de um projeto. assim acaba-se criando uma repetição desnecessária de código. para resolver esse tipo de problema existem os helpers.

helpers são componentes semelhante a classes que possuem métodos que executam alguma tarefa e devolvem um pedaço de código como resposta. esses métodos podem ser usados nas views de um projeto, evitando a repetição de código. o melhor benefício da centralizaçào de funcionalidades é facilitar a manutenção do código.

o CakePHP facilita bastante o trabalho fornecendo vários helpers e permitindo que outros sejam criados rapidamente.


18 tools and a hair, por slambo_42, sob aCreative Commons

Criando um Helper

um helper consiste em apenas um arquivo que fica na pasta /app/views/helpers/. apesar de estar na pasta das views (acho que deveria estar em outro lugar), o código do helper é formado por uma classe PHP que possui métodos que manipulam o que vc quiser e devolvem uma resposta para a view.

como um exemplo, vamos criar um helper para resolver o seguinte problema: todas as páginas de um site precisam ter um certo banner, que não ficará no topo ou rodapé das páginas, mas em meio ao seu conteúdo. e a imagem desse banner poderá mudar às vezes.

por mais que seja super simples fazer isso no próprio html, poderemos criar um helper que nos forneça o código desse banner. em todas as páginas que precisarmos dele usaremos o helper. caso haja alteração futura, simplesmente alteraremos o helper.


<?php
/* /app/views/helpers/banner.php */

class BannerHelper extends AppHelper {
function show() {
$banner = "<img src=\"banner.png\">"
return $this->output($banner);
}
}
?>

como vc pode ver, criamos um arquivo - /app/views/helpers/banner.php. uma classe que herda de AppHelper - class BannerHelper extends AppHelper. um método simples - show(). dentro desse método retornamos o resultado do método output(), que é responsável por passar os dados que receber para a view.

Usando o novo Helper

para usar o novo helper, declare-o no controller:


<?php
class OneController extends AppController {
var $helpers = array('BannerHelper');
// ...
?>

na view é só chamar:

<?= $banner->show() ?>

Aumentando as Possibilidades

dentro do helper que vc acabou de criar, é possível usar qualquer outro helper. basta declará-lo, assim como foi feito no controller do exemplo acima.

vamos incrementar o helper que acabamos de criar. acrescentaremos um link à imagem. pra isso usaremos o HtmlHelper do próprio cake.


<?php
/* /app/views/helpers/banner.php */

class BannerHelper extends AppHelper {

var $helpers = array('Html');

function show($class = 'banner') {
$image = '<img src="banner.png">';
$url = 'http://dx7lab.com';
$link = $this->Html->link($image, $url, array('class' => $class));
$banner = '<div>' . $link . '</div>';

return $this->output($banner);
}
}
?>

agora o banner ficou mais completo com um código simples. temos o caminho da imagem e a url. usamos o HtmlHelper do Cake pra montarmos o link do banner. pra poder usar o HtmlHelper apenas o declaramos logo no início da classe. depois colocamos o banner dentro de uma div. além disso recebemos um parâmetro que será a classe css do link. depois retornamos tudo através do output.

essa técnica pode ajudar bastante na organização do código do projeto.

comments to @rafaeldx7 on Twitter
Back