Evento "Avvio applicazione"

Devo implementare nella mia app questo controllo:

Se la data di sistema è passata all’anno successivo rispetto ad una data registrata sul db, in automatico il programma esegue determinate operazioni.

La parte di programmazione è semplice, solo non so su quale evento far partire questo automatismo.

Mi servirebbe tipo un metodo "beforeStart" della CWebApplication, che però non esiste.

Accetto suggerimenti

Grazie a tutti

Roberto

crea un comando ed utilizza crontab, mi pare la soluzione più efficace

Si ottima idea perchè mettere del codice che ah ogni post fa questa verifica mi sembra troppo pesante.

Comunque se proprio non ti piacciono i crontab credo dovresti lavorare a livello di controller magari mettendo un filtro che esegue quella verifica

Per i filtri praticamente nel controller devi fare così




	public function filters()

	{

		return array(

			'initTheme',

			'initScriptComuni',

			'initInternationalization',

			'initMenu',

		);

	}

	public function filterInitTheme($filterChain)

	{

		if(Yii::app()->session["themename"]){

			Yii::app()->theme = Yii::app()->session["themename"];

		}else{

			Yii::app()->theme = "classic";

		}

		$filterChain->run();

	}



In questo pezzo di codice mio ad esempio imposto il tema dell’utente poi a cascata ho messo altri filtri che si occupano dell’internazionalizzazione, vocie dei menu ecc

la classe CController ha il metodo beforeAction che viene eseguito prima di qualsiasi altro controller

sopratutto considerando il fatto che è un operazione che deve eseguire una volta l’anno…

Ottimo, molto più adatto

Ciao amici! Le soluzioni che avete proposto sono migliori di quella che sto per scrivere. Ma che scrivo ugualmente, per comprendere un aspetto di Yii.

Questo è il nostro file /index.php:




<?php


// change the following paths if necessary

$yii=dirname(__FILE__).'/../yii/framework/yii.php';

$config=dirname(__FILE__).'/protected/config/main.php';


// remove the following lines when in production mode

defined('YII_DEBUG') or define('YII_DEBUG',true);

// specify how many levels of call stack should be shown in each log message

defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);


require_once($yii);

Yii::createWebApplication($config)->run();



Fate molta attenzione a queste due righe:




require_once($yii);

Yii::createWebApplication($config)->run();



Quando lanciamo run, viene eseguita tutta la nostra richiesta, cercando il controller, la action, … e così via. Ma noi possiamo infilarci in mezzo. Ed utilizzare, per esempio, gli eventi di Yii. Esatto! Yii ha una programmazione ad eventi. Non è il solo framework ad avere questa feature, ma la implementa in un modo davvero interessante.

Non entro nel dettaglio. Fatto sta che se vogliamo possiamo usare alcuni eventi, ovvero onBeginRequest oppure onEndRequest. Provate a vedere che cosa succede se sostituite le due righe qui sopra con le due righe qui sotto all’interno della vostra applicazione.




require_once($yii);

$application = Yii::createWebApplication($config);


Yii::app()->onBeginRequest = function ($event) {

	echo "onBeginRequest";

};


Yii::app()->onEndRequest = function ($event) {

	echo "onEndRequest";

};


$application->run();



Probabilmente a roby_wan_kenoby farebbe comodo. Ma la proposta di nickcv è decisamente la migliore. Mettere del codice qui significherebbe appesantire l’applicazione. In ogni caso, può essere interessante conoscere queste potenzialità di Yii. Ci tenevo a raccontarvele =).

Yii è cosi potente che complesso anche farlo funzionare bene.

mi da errore di sintassi sulla seguente riga:




Yii::app()->onBeginRequest = function ($event) {        echo "onBeginRequest";};



Yii non è la cosa più potente che c’è. Ma mi fermo qui per non lanciare un flame.

Beh, che errore ti da?

Questa in effetti era la soluzione che intendevo perseguire, ma mi documenterò anche sui crontab che non conosco.

Ringrazio tutti e mi scuso di non aver risposto, ma devo avere la configurato male il mio account perchè non ho ricevuto avvisi dei vostri suggerimenti via email.

grazie e ciao

Roberto

Ehm, tanto per sapere, cosa hai trovato più potente di yii?

Symfony2. Ma aggiungo che ci sono cose che non farei mai con Symfony2. E cose che non farei mai con Yii. Ogni strumento va contestualizzato all’uso che se ne vuole fare.

PS. Sottolineo Symfony2. Che non ha nulla a che vedere con Symfony1.x

Devo anche però dire quali sono le mie ragioni:

  • testabilità

  • disaccoppiamento

  • php5.3

  • community

Yii è testabile. Ma è lento. Molto lento, … testare con yii. Con Symfony2 ed Yii si fanno test funzionali ed unitari. In entrambi i casi con phpUnit. Con Symfony2 c’è un maggiore supporto a Behat, che ci permette di fare del BDD. La facilità con cui si può testare il codice è disarmante.

Disaccoppiamento. Le future versioni di drupal hanno al loro interno pezzi di Symfony2. Capiamoci: che senso ha riscrivedere del codice se è testato e funzionante? Non mi piace reinventare la ruota.

Php5.3. Al momento Yii è scritto in Php5.2. Ed è anche vero che ci sono molti host che offrono 5.2 e raramente 5.3. Questo va a vantaggio di Yii. Yii è pragmatico. In questo senso vince Yii, se puntiamo ad host non professionali come Aruba. Basti pensare che Yii si impianta se non hai configurato la timezone. Almeno Symfon2 se ne accorge. Ma quando voglio puntare al massimo della potenza di php, al momento, ho Symfony2. E Zend. Ma Zend è per ingegneri. Lo scarto a priori (nel mio caso).

Community. La community italiana di Symfony è ENORME. Basti sapere che la documentazione italiana è stata completamente tradotta. La community è anche molto formata e tecnica. Anche qui abbiamo utenti certificati. Ma per usare Yii ti basta conoscere php. Per usare Symfony2 devi passare uno scoglio di competenze molto alto. OOp, Design Pattern, php5.3. Pensa che io vorrei già usare Php5.4.

Alla luce di questa analisi, io reputo Symfony2 più potente di tanti altri frameworks. Yii2.0

Ma ribadisco: non ha senso usare un ferrari per attraversare la strada, o pensare di percorrere l’A14 a piedi.

e … "Yii incorporates many ideas and work from other well-known Web programming frameworks and applications."

il framework più potente è Zend Framework, che oltretutto offre a mani basse i migliori sistemi di testing del codice, se usato con Zend Server e Zend Studio.

per quel che riguarda la community italiana apprezzo molto che tu faccia di tutto per tenere attiva quella di yii sensorario, ma chiunque faccia questo per lavoro e non è in grado di sfruttare la communità inglese ha sbagliato decisamente professione.

Son d’accordo. Al ritorno dal PhpDay, mi faceva strano dover tornare a parlare italiano.