2011-09-14 23 views

risposta

15

Se si desidera utilizzare onBeginRequest e onEndRequest si può fare aggiungendo le seguenti righe nel file di configurazione:

return array (
... 
'onBeginRequest'=>array('Y', 'getStats'), 
'onEndRequest'=>array('Y', 'writeStats'), 
... 
) 

o si può fare in linea

Yii::app()->onBeginRequest= array('Y', 'getStats'); 
Yii::app()->onEndRequest= array('Y', 'writeStats'); 

dove Y è un nome di classe e getStats e writeStats sono metodi di questa classe. Ora immaginate di avere una classe Y dichiarata in questo modo:

class Y { 
    public function getStats ($event) { 
     // Here you put all needed code to start stats collection 
    } 
    public function writeStats ($event) { 
     // Here you put all needed code to save collected stats 
    } 
} 

Così su ogni richiesta entrambi i metodi verrà eseguito automaticamente. Ovviamente puoi pensare "perché non sovraccaricare semplicemente il metodo BeginRequest?" ma prima di tutto gli eventi consentono di non estendere la classe per eseguire codice ripetuto e inoltre consentono di eseguire diversi metodi di classi diverse dichiarate in luoghi diversi. modo da poter aggiungere

Yii::app()->onEndRequest= array('YClass', 'someMethod'); 

in qualsiasi altra parte della vostra applicazione insieme a gestori di eventi precedenti e otterrete eseguire sia Y->writeStats e YClass->someMethod dopo la richiesta di trasformazione. Questo comportamento consente di creare componenti di estensione di qualsiasi complessità senza modificare il codice sorgente e senza l'estensione delle classi base di Yii.

+0

Quindi, dove nella struttura del progetto dovrebbe essere la clas live se la aggiungo nel file di configurazione? – RicardoE

1

io credo che si possa fare questo praticamente ovunque nei file prima di ogni uscita è iniziata, così dovrebbe funzionare in un controller, vista o personalizzato di classe, di solito si trova nella "protetta "cartella in un'app Web Yii. Per vostra informazione, quei file non sono file core e possono essere (quasi) liberamente modificati, come indicato nei file di framework Yii (come indicato nella variabile "$ yii" nel file index.php bootstrap).

le funzioni assomigliano:

Yii::app()->onbeginRequest = create_function('$event', 'return function_name_a();'); 
Yii::app()->onendRequest = create_function('$event', 'return function_name_b();'); 
+3

che odora di un eval ... –

+0

hai chiesto come è stato fatto ... – ldg

+0

si può fare 'Yii :: app() -> onendRequest = function() {// fare somthing};' –

Problemi correlati