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.