Sabe quando queremos fazer uma coisa sempre quando outra acontece? Por exemplo, antes de fazer alguma coisa no model, fazer uma chamada aos métodos para salvar, buscar e excluir. Nesses casos, podemos sobrescrever os métodos de callback, os quais são apresentados a seguir.
- beforeFind(mixed $queryData)
- afterFind(array $results, bool $primary)
- beforeValidate()
- beforeSave()
- afterSave(boolean $created)
- beforeDelete(boolean $cascade)
- afterDelete()
- onError()
Podemos sobrescrevê-los tanto nos model’s quanto no AppModel para tornar as mudanças globais. Vamos ver cada um deles agora.
BeforeFind
Esse método é chamado antes de toda função find().
A variável $queryData carrega informações sobre a query, como condições e campos.
Dentro de seu corpo podemos fazer, por exemplo, uma validação e parar a chamada baseada na mesma.
Listagem 1: Sobrescrita do método beforeFind.
public function beforeFinder($queryData){
if(empty($queryData)) return false;
}
AfterFind
Como podemos presumir, ela é chamada depois da função find(). Podemos usá-la para alterar o resultado da consulta, ou, mais uma validação.
A variável $results traz um array com os resultados no formato padrão do cake.
Listagem 2: sobrescrita de afterFind
public function afterFind($results) {
foreach ($results as $key => $val) {
if (isset($val['Event']['begindate'])) {
$results[$key]['Event']['begindate'] = $this->dateFormatAfterFind($val['Event']['begindate']);
}
}
return $results;
}
public function dateFormatAfterFind($dateString) {
return date('d-m-Y', strtotime($dateString));
}
BeforeValidate
Usado antes das validações. Aqui podemos modificar os dados dos modelos ou modificar as regras de validações. Lembrando que sempre devemos retornar true, se for o caso, ou a função a ser chamada após esta será abortada.
BeforeSave
Aqui podemos escrever qualquer lógica para ser executada antes da inserção. A única coisa com a qual devemos nos preocupar é retornar true, novamente se for o caso, ou então a função save() será parada.
AfterSave
Utiliza-se este método para qualquer lógica ser executada depois de salvar os dados.
O valor de $created será true se um novo objeto foi criado em vez de atualizado.
BeforeDelete
A variável $cascade será true se os registros que dependem deste deverão ser deletados também.
AfterDelete
Para executar qualquer lógica após a exclusão de dados.
OnError
Este método é chamado se qualquer problema ocorrer.
Conclusão
Portanto podemos observar que os métodos têm praticamente a mesma estrutura e mesmas funções, entre elas: Validar, converter e formatar. São autoexplicativos, ou seja, seus nomes já indicam o que fazem.
Os callbacks são de uso muito simples, porém eficaz, sabendo usá-los tiraremos ótimo proveito dos mesmos quando se diz respeito ao reaproveitamento do código.
Então é isso, espero que tenham gostado, deixem seus comentários e até a próxima.