Veja nesse artigo como criar e instalar nossos próprios helpers e components bem como também instalar helpers de terceiros.

Atenção! Para este artigo julgo que os leitores já tem conhecimento básico sobre o framework. Também recomendo a leitura desse artigo Components, Helpers, Behaviour e Data Soucers - CakePHP.

O CakePHP em sua instalação básica já nos fornece bons helpers e components, como por exemplo:

Helpers

  • Html
  • Form
  • Number
  • Time

Components

  • Session
  • Security
  • Auth
  • Email
  • Cookies

Porem, em certos momentos precisamos de algo mais especifico para nossa situação. Muitos desses podem ser baixados em http://bakery.cakephp.org/ e claro que também podemos criar os nossos.

Criando e instalando Helpers.

Já sabemos que os helpers funcionam como uma extensão da view, um lugar onde são colocados códigos que poderão ser usados em todas as views, ou simplesmente para não poluir a view. Formatar data, moeda, componentes HTML pré-formatados, entre outros, são exemplos do que podemos colocar dentro de um helper.

Então, devemos sempre pensar antes de criar um helper se ele atende a esses requisitos, afinal o objetivo é escrever apenas o necessário. Caso não, então opte usar uma função simples, mas, cuidado para não poluir a view ou você vai ter uma grande dor de cabeça na hora de realizar manutenção nela.

A criação de um helper envolve poucas regras, veja:

Digamos que queremos um helper que cria links. Então vamos criar um arquivo com o seguinte código.

Listagem 01: Criando um helper


App::uses('AppHelper', 'View/Helper');
class LinkHelper extends AppHelper {
    public function makeLink($titulo, $url) {
        //logica para criar um link personalizado
    }
}

Agora salvemos esse arquivo com em app/View/Helper/ com o nome LinkHelper.php, simples não? Então o que podemos observar aqui em relação a regras foi que todos helpers devem ser filhos de AppHelper, serem salvos em app/View/Helper/ e o nome da classe deve ser no formato NomeHelper e de o mesmo acrescido de .php para o nome do arquivo.

Nesse nosso helper, fica claro a similaridade com o HtmlHelper, então seria muito bom que pudéssemos juntar os dois em um só, não seria? E é possível de forma muito simples, basta fazer como se estivéssemos em um controller, veja:

Listagem 02: Incluindo outro helper no helper criado


App::uses('AppHelper', 'View/Helper');
class LinkHelper extends AppHelper {
    public $helpers = array('Html');
    public function makeLink($titulo, $url) {
            //logica para criar um link personalizado
    //agora podemos usar métodos do HtmlHelper
$link = $this->Html->link($title, $url, array('class' => 'classCSS'));
return '<div>' . $link . '</div>';
    }
}

Agora estando com o arquivo do Helper pronto podemos usá-lo normalmente chamando no controller e usando o método em uma view.

Listagem 03: Usando o helper criado


//controller
class PostsController extends AppController {
    public $helpers = array('Link');
}
//view echo $this->Link->makeLink('titulo para o link', '/recietas/edit/5');

Podemos observar na Listagem 3 que o helper fica acessível através do nome da classe sem "Helper" por exemplo LinkHelper fica acessível por Link assim como HtmlHelper fica acessível apenas por Html.

Podemos também definir funções para todos os helpers de uma só vez, para isso basta modificar o arquivo AppHelper.php em app/View/Helper, veja:

Listagem 04: Adicionando função a todos os helpers


App::uses('Helper', 'View');
class AppHelper extends Helper {
    public function digaOla() {
    return "Olá, Mundo";
    }
}

Da mesma forma como instalamos nosso helpers devemos instalar os helpers oriundos de terceiros, colocando-os em app/View/Helper simples assim sem nenhum mistério.

Criando Components

Usamos components para compartilhar lógicas entre controladores. Por exemplo, se tivéssemos diversos controladores que tratam valores em formatos de moeda (0,00) convertendo-os para Double (0.00), ao invés de criar uma função em cada controlador eu criaria um component com essa função.

Outro exemplo muito bom é o de um component para realizar operações matemáticas com funções genéricas. Vejamos o código da Listagem 05 e depois analisaremos o processo de criação.

Listagem 05: Classe para criação de um component


class MathComponent extends Component {
//função apenas para exemplificar, claro
public function somaDoisNumeros($num1, $num2) {
return $num1 + $num2;
    }
}

Cole o código da Listagem 05 num arquivo php e salve-o com o nome de MathComponent.php(NomeDaClass.php) no diretório app/Controller/Component/, e todo componente deve ser uma subclasse de Component.

Assim como o Helper o Component também pode integrar outros components, veja na Listagem 06 o código de dois componentes no qual um integra o outro.

Listagem 06: Component incorporando outro


//app/Controller/Component/MathComponent.php
class MathComponent extends Component {
public  $components = array("Outro");
//função apenas para exemplificar, claro
public function somaDoisNumeros($num1, $num2) {
return $num1 + $num2 + $this->Outro->foo();
    }
}
//app/Controller/Component/OutroComponent.php
class OutroComponent extends Component {
    public function foo() {
    return 7;
    }
}

Para habilitar um dos nossos componentes em um controller procedemos da mesma forma como qualquer um componente que já venha definido.

Listagem 07: Adicionando nosso componente em um controller


class ReceitaController extends AppController{
public $components = array("Math");
}

Só lembrando que o component Session já vem habilitado por padrão para todos os controller por isso que devemos coloca-lo no array $components caso já estejamos usando o mesmo em algum lugar do nosso código.

Para adicionar components de outras pessoas também devemos coloca-los em app/Controller/Component e usa-los normalmente como os que criamos.

Bem pessoal é isso, espero que tenha gostado deixem seus comentários e até a próxima.