O que é umEvent? Pra que serve? Quando usar?

Olá, caros,

Alguém poderia, por gentileza, postar uma explicação mais clara sobre o que o guia do Yii quer dizer com os Eventos? O que são? Algum exemplo prático de uso? Ele cita que se os comportamentos forem associados aos eventos, são ainda mais poderosos, mas a explicação sobre eventos, é, como de costume, superficial e feita somente para o Qiang entender.

Uma luz sobre isso seria de grande valia, de repente tem gente (eu, por exemplo) quebrando a cabeça com coisas que poderiam ser resolvidas com os tais Events mais facilmente.

De antemão, um sincero muito obrigado!!

:)

Bom, se você já trabalhou com Javascript, VB, ActionScript, deve ter uma noção do que é um evento. Não os vejo tão poderosos e essenciais no Yii como são em outras linguagens, mas a idéia é a mesma =D

No Yii todo componente (ou seja, toda classe derivada de CComponente) tem a capacidade de iniciar eventos. A idéia é "avisar" que algo aconteceu ou estar para acontecer, e permitir ao programador interfira nesse acontecimento. Um event handler (Um callback que manipula um evento) pode alterar o comportamento de um componente, sem a necessidade de mexer no código da classe.

Um exemplo legal do uso de Behaviours com Events é o component do Ismael:

http://www.yiiframework.com/forum/index.php?/topic/3814-behavior-pra-salvar-arquivos-de-upload/

Com ele, a tarefa de salvar arquivos atrelados à um Model fica bastante simples. Basta adicionar o comportamento ao modelo e ele se encarrega de organizar, salvar e excluir o arquivo.

Basicamente ele manipula os eventos beforeSave, afterSave e afterDelete do componente ActiveRecord, fazendo automaticamente (uma vez que os eventos sempre são executados) o que, normalmente, seria tarefa do programador.

Se não me engano, há algum tempo atras o ricardograna também fez um Behaviour interessante que facilitava a conversão de datas na hora de salvar e recuperar um modelo do banco. Nessa mesma linha, também já vi nos fóruns um behaviour que se encarregava de atualizar o campo de data de criação ou atualização de um registro.

Bom, espero ter ajudado esclarecer a função do Eventos. Qualquer dúvida é só perguntar ;)

Davi, ótimo!

Sendo assim, sem mistérios…os eventos beforeSave, beforeValidate e CIA são tranquilos, a confusão me foi causada porque estava lendo o Yii Guide e tem um exemplo com um evento "onClicked" http://www.yiiframework.com/doc/guide/basics.component




public function onClicked($event)

{

    $this->raiseEvent('onClicked', $event);

}



Fiquei pensando como um componente do Yii poderia receber um click, uma vez que os eventos de interação com mouse são basicamente acionados quando o usuário aponta os objetos na tela (em javascript) e os componentes são instanciados mas trabalham internamente, renderizando o XHTML e não aparecendo diretamente na interface de comunicação com o usuário (ou seja, um componente não seria clicável do meu ponto de vista).

Vou simplesmente desconsiderar o tal do onClicked, sua explicação e os exemplos dos comportamentos desmistificaram isto para mim.

Muito obrigado!!!!

:)

Abraços!!

Bom, tratando-se de Yii o exemplo do onClicked realmente é confuso. Mas não impossível =D

Quem ja trabalhou com ASP.NET, sabe que pode-se tranquilamente tratar eventos como o onClick de qualquer botão (ou outro componente que suporte esse evento) em uma página. Nesse caso, será feita uma nova requisição ao servidor e o event handler responsável será executado.

O mais interessante é que o ASP.NET é o responsável pelo exemplo confuso! Os responsáveis pelo Yii eram antes os desenvolvedores do framework PRADO, que era baseado, em partes, no … ASP.NET!!! (Vocês já repararam como as páginas de erro de ambos são idênticas?). Logo, muita coisa do Yii é cópia do antigo framework, incluindo esse exemplo confuso, mas que funciona perfeitamente no PRADO! ;D

Outro exemplo de rastro do Asp.net no Yii,os namespaces:

System.web

System.web.form

Sytem.data

Igualzinho o .net =D

tá explicado…heheh…nunca mexi com .Net, por isso talvez minha dúvida,

mais uma vez, valeu, Davi!!

:)

Não só .net. A idéia do JSF se parece bastânte tb.

Só pra completar, a parte de acesso a dados, quando começei a usar o Yii, era praticamente a mesma do prado. Agora já mudou um pouco, mas ainda segue a mesma idéia.

Se não me engano, as classes de Caching são as mesmas tb.