Criando seus proprios plugins para o CakePHP

Para que?
Uma funcionalidade que me interessou no CakePHP é a possibilidade de criar plugins! Não só os plugins em si, mas a forma com que o framework interage com ele.
Um plugin pode ser considerado uma aplicação à parte, sendo ela composta de seus próprios controladores, modelos e visões (MVC). E não só isso. Quando estava desenvolvendo o plugin Pmail, me deparei com uma questão: gostaria que o Pmail fosse encapsulado. Para tal, teria que criar uma pasta dentro do Pmail que encapsulasse as minhas imagens js, files e css. Mas eis que surge a duvida: Será que o CakePHP vai chiar? Foi uma grande pergunta, porém bastou uma consulta na documentação explicando o salvador da pátria: o tal do vendors. Foi o que me salvou. Desenvolvi o Pmail mais encapsulado possível…
Uma grande vantagem da utilização do plugin é o reuso para outras aplicações. Suponha que você construa um plugin para gerenciar banners de seu site. O que terá que construir é só um gerenciador e uma chamada para uma action que devolverá o banner… Muito fácil!!!
Legal. Tendo seu plugin, o que falta é propagar para seus sites A, B e C.
Desenvolvendo meu primeiro plugin
Para ilustrar, vamos criar um plugin exemplo de um pequeno gerenciador de banner:

  1. Dentro da pasta plugins crie uma pasta com o nome do seu plugin (banner).
  2. Crie as pastas para a estrutura MVC (controllers, models, views).
  3. Agora crie seu controller e model pai (Obs.: com o prefixo plugin), ficando banner_app_controller.php e banner_app_model.php. Você pode extender tanto de seu app_controller da aplicação principal quanto direto de seu controller.

Então teremos:
plugins
- banner
– controllers
– models
– views
– banner_app_controller.php
– banner_app_model.php
banner_app_controller.php

class BannerAppController extends AppController {
}

banner_app_model.php

class BannerAppModel extends AppModel {
}

Esta concluído a estrutura básica para trabalhar.
Peculiaridades do plugin

  1. Ao criar suas tabelas sempre será necessário o uso do prefixo, que no caso é o nome do plugin (exemplo: banner_administrators).
  2. Em seu controller, utilize o atributo uses passando os models a ser utilizado, lembrando do prefixo plugin (exemplo: array(’Banner.Administrator’)).
  3. Ao criar um relacionamento é necessário passar o parâmetro className. Exemplo:

public $hasMany = array('File', array(
'className' => 'Banner.file'
));

Pronto pessoal por hoje é só.