Components
Introdução
Componentes (components) são pacotes com funções lógicas que são usadas para serem compartilhadas entre os controladores. Se você está querendo copiar e colar coisas entre os controladores, você pode criar funcionalidades em componentes para isso.
O CakePHP já vem com um conjunto de componentes para os mais diversos usos, por exemplo:
- Segurança
- Sessõs
- Lista de controle de acessos (ACL)
- E-mails
- Cookies
- Autenticação
- Manipulação de requisições
Cada um dos componentes será explicado em outros capítulos. Por enquanto, mostraremos apenas como criar seus próprios componentes. Criando componentes ajuda a manter o código do controlador limpo e permite que você reuse o código entre os projetos ou controladores.
Construindo componentes personalizados
Suponha que sua aplicação online precisa utilizar funções complexas de matemática em diversas partes da aplicação. Poderíamos, então, criar um componente para que esta lógica seja compartilhada entre diversos controladores.
O primeiro passo é criar um arquivo para o componente e uma classe. Crie o arquivo em /app/controllers/components/math.php. A estrutura básica do arquivo do componente é similar a apresentada abaixo.
<?php
class MathComponent extends Object {
function doComplexOperation($amount1, $amount2) {
return $amount1 + $amount2;
}
}
?>
<?phpclass MathComponent extends Object {function doComplexOperation($amount1, $amount2) {return $amount1 + $amount2;}}?>
Quando seu componente estiver criado, nós podemos utilizá-lo nos controladores da aplicação colocando o nome do componente no vetor da variável $components:
// Isso faz com que o novo componente possa ser acessado usando $this->Math
var $components = ('Math', 'Session');
// Isso faz com que o novo componente possa ser acessado usando $this->Mathvar $components = ('Math', 'Session');
Acessando classes do MVC de dentro dos componentes
Para ter acesso a instância do controlador dentro do seu novo componente, você precisa implementar o método startup(). Este é um método especial que trás a referência do controlador como primeiro parâmetro e esta função é chamada automaticamente depois da função beforeFilter() do controlador. Se por alguma razão você não quer que o método startup() seja executado quando o controlador é instanciado, defina o valor da variável $disableStartup para true.
Se você deseja inserir uma lógica antes que o controlador seja chamado, use o método initialize() no seu componente.
<?php
class MathComponent extends Object {
//chamado antes de Controller:beforeFilter()
function initialize() {
}
//chamado depois de Controller::beforeFilter()
function startup(&$controller) {
}
function doComplexOperation($amount1, $amount2) {
return $amount1 + $amount2;
}
}
?>
<?phpclass MathComponent extends Object {//chamado antes de Controller:beforeFilter()function initialize() {}//chamado depois de Controller::beforeFilter()function startup(&$controller) {}function doComplexOperation($amount1, $amount2) {return $amount1 + $amount2;}}?>
Você pode também querer utilizar outros componentes dentro de um componente personalizado. Para isso, basta criar a variável $components na classe (assim como você faria em um controlador) como um array que contenha os nomes dos componentes que você deseja utilizar.

login to add a comment