Aftersave Questo Sconosciuto !

Ciao, avrei un dubbio sul come affrontare questa situazione nel migliore dei modi:

Ho un model che si chiama "Progetto" che permette in seguito di gestire degli appuntamenti collegati ad esso (con un model:"Appuntamenti").

Ora si è presentato il caso in cui se un Progetto è di tipo A tutto ok, se invece è di tipo B, automaticamente dovrei popolare la tabella degli "Appuntamenti" per la durata del Progetto collegato.

Es.

Progetto->dataInizio = 01/09/2012

Progetto->durata = 15

Progetto->tipo = "B"



if(Progetto->tipo == "A")

{

 //non fare nulla

}else{

  $this->popolaTableAppuntamenti($dataInizio, $durata)

}

la domanda è, utilizzo un metodo del componente(popolaTableAppuntamenti) o mi affido ad un behavior ?

grazie

Io scriverei il codice nel metodo beforeSave() del model

Grazie zaccaria, posso chiederti di spiegarmi la differenza tra le due opzioni ? Giusto per capire anch’io meglio il perchè :)

Il metodo beforeSave viene chiamato ogni volta prima di effettuare un salvataggio.

In questa maniera sei sicuro che in ogni caso, prima di salvare il codice funziona.

Se scrivi un metodo ‘volante’, ovunque tu lo metta (model o controller), poi ti devi ricordare di invocarlo.

Perfetto grazie mille zaccaria, opterò però per l’afterSave() dato che mi serve l’id del model appena creato ;)

Bene.

Se usi afterSave vai tranquillo, se invece usi beforeSave ricordati di ritornare parent::beforeSave o non funziona.

Ecco forse perchè stò impazzendo con afterSave … forse non ha bisogno del parent::afterSave() ? Ora verifico :)

Grazie mille zaccaria ;)


/**

	 * This method is invoked after saving a record successfully.

	 * The default implementation raises the {@link onAfterSave} event.

	 * You may override this method to do postprocessing after record saving.

	 * Make sure you call the parent implementation so that the event is raised properly.

	 */

	protected function afterSave()

	{

		if($this->hasEventHandler('onAfterSave'))

			$this->onAfterSave(new CEvent($this));

	}

Lui dice di mettercelo! :)

In afterSave non puoi fare $this->save(), entri in un circolo vizioso.

Se ti serve metti una condizione:




if ($this->campo==null){

   $this->campo= 'qualcosa';

   $this->save();

}

Io dovrei salvare un altro model nel metodo afterSave(), con condizione, è lo stesso ?




$altroModel = Appuntamenti::model()->find($query);

if ($this->campo==null){

   $altroModel->save();

}

Secondo me dovrebbe funzionare.