Uma ajudinha com AFTER e BEFORE!

Senhores,

Alguém já trabalhou com afterDelete e similares e tb com beforeDelete?

Poderiam dar uma palhinha? onde usar (controller ou view) melhores práticas, etc…

Muitíssimo grato, desde já!

Utilizo direto para campos do tipos monetário e data. Dê uma olhada em http://www.yiiframework.com/extension/i18n-datetime-behavior

Poderia postar alguns exemplos?

Este behavior implementa os métodos afterFind e beforeSave. Basta adicionar o behavior ao seu model, adicionado o seguinte método:




public function behaviors()

{

    return array('datetimeI18NBehavior' => array('class' => 'ext.DateTimeI18NBehavior')); // 'ext' is in Yii 1.0.8 version. For early versions, use 'application.extensions' instead.

}



Na prática o que vai acontecer é que os seus campos DATE e DATETIME que são salvos no banco no formato YYYY-MM-DD serão transformados p/ DD/MM/YYYY após o find e retransformados p/ YYYY-MM-DD antes de salvar. Fica tudo transparente pra vc, não precisa usar nenhum tipo de conversão de date();

Interessante isso, esse tipo de filtro eu não sabia ou desconhecia.

Tem listagem dessas class?

Acho que no core do Yii só tem a http://www.yiiframework.com/doc/api/1.1/CTimestampBehavior.

Mas a extensão do Ricardo pra facilitar a questão de datas é outra (De grande ajuda, diga-se de passágem)

Vira e meche aparece algumas em alguma extensão, mas fazer a sua propria é bem simples. Eu fiz uma que uso nos projetos meus pra gerar id (no formato UUID) pros meus e é muito fácil.

O manual do Yii dá pouco destaque a estas funções que diria eu, são um dos pontos fortes deste framework.

NOTA ESPECIAL: SEMPRE retorne true ou (de preferencia), parent::metodo. Se voce nao retornar nada, o restante da execução será cancelado.

Vou tentar explicar como utilizo estas funções:

afterConstruct

Executado após a construção do objeto, utilizo para inicializar attributos do model, como situação, hora da inclusão (como CDbExpression), etc.

afterFind

Executado sempre que o model é recuperado do banco de dados. Momento ideal para inserir campos calculados e efetuar conversão de dados para output.

beforeValidate

Executado ANTES da validacao do model. Isto é útil para campos que precisam ser formatados adequadamente para que a validação funcione.

Ex: retirar a máscara de um campo CPF, de forma a validar somente os numeros do CPF

Ou seja, para campos que precisam de tratamento PARA a validação.

afterValidate

Executado APÓS a validacao. Momento para desconverter os campos convertidos pelo beforeValidate. No exemplo anterior, o CPF era convertido para ficar somente com numeros. Agora, aplica-se novamente a mascara para a correta exibição no formulario.

beforeSave

Executado ANTES de salvar, porém DEPOIS de validar. (É importante notar esta diferença, que pode influenciar seu resultado)

Aqui vc pode setar/converter atributos automaticos para serem salvos no banco (situações, datas timestamp, etc.)

afterSave

Executado APÓS o salvamento do model. Utilze para desconverter atributos ou então para salvar modelos relacionados (ex: salvar o model e em seguida salvar um log sobre a alteracao no model)

beforeDelete

Executado ANTES da exclusao do model. Momento ideal para apagar registros filhos associados ou mesmo até para barrar a exclusão por ter filhos associados, ou então para atualizar um registro pai (ex: exclusao de item de venda atualiza valor total da venda)

afterDelete

Executado APÓS a exclusao do model. Pode ser utilizado para gerar um log

Em relação a behaviors, não me estranha alguns passarem batido, visto que a propria documentação do Yii passa praticamente batida tambem por este tema…