Seguendo il cookbook, mi sono fatto un’idea sugli eventi. In particolare riassumo tutto qui:
EVENTO
/protected/component/NewAnagraficaEvent.php
<?php
class NewAnagraficaEvent extends CModelEvent {
public $anagrafica;
}
GESTIONE EVENTO NEL MODEL
/protected/models/Anagrafiche.php
(vanno aggiunti questi due metodi)
public function aggiungiAnagrafica(Anagrafiche $anagrafica) {
$anagrafica->id = $this->id;
$evento = new NewAnagraficaEvent();
$evento->anagrafica = $this;
$this->onNewAnagrafica($evento);
return $evento->isValid;
}
public function onNewAnagrafica($evento) {
$this->raiseEvent('onNewAnagrafica', $evento);
}
GESTIONE EVENTO (NOTIFICA)
/protected/components/NotificaNuovaAnagrafica.php
<?php
class NotificaNuovaAnagrafica {
public function notifica($event) {
$anagrafica = $event->anagrafica;
Yii::log("\n\n\n" . 'Nuova Anagrafica inserita: ' . ($anagrafica->username), CLogger::LEVEL_INFO);
}
}
GESTIONE EVENTO NEL CONTROLLER
public function actionCreate() {
$model = new Anagrafiche;
if (isset($_POST['Anagrafiche'])) {
$model->attributes = $_POST['Anagrafiche'];
if ($model->save()) {
$model->onNewAnagrafica = array(new NotificaNuovaAnagrafica, 'notifica');
$model->onNewAnagrafica = function () {
Yii::log('Log in linea =))))))');
};
$model->aggiungiAnagrafica($model);
$this->redirect(array('view', 'id' => $model->id));
}
}
$this->render('create', array(
'model' => $model,
));
}
Yii credo sia l’unico o uno dei pochi framework che ha il supporto degli eventi. Voi che cosa ne pensate? Nell’esempio che ho scritto … faccio del semplice log, ma se l’evento gestito fosse la registrazione di un utente? E se la notifica fosse una email agli amministratori? Insomma … l’invio della email lo metterei direttamente nel controller. Che vantaggi ho da questa feature?
La prima cosa che mi viene in mente, è che posso isolare il codice dell’evento dal controller. Mi sembra decisamente ordinato. Pulito.
Oh! Nella gestione del controller ho provato ad usare una funzione anonima. Funziona. Ma quanto è bello php!?