2011-09-14 20 views
8

Quiero ejecutar algún código en el evento onBeginRequest.
¿Dónde hago eso? Supongo que no se supone que agregue esto en el código de la biblioteca central.
Soy un novato total en YiiCómo usar eventos en Yii

Respuesta

15

Si desea utilizar OnBeginRequest y onEndRequest puede hacerlo añadiendo las siguientes líneas en el archivo de configuración:

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

o puede hacerlo en línea

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

donde Y es un nombre de clase y getStats y writeStats son métodos de esta clase. Ahora imagina que tienes una clase Y declarada como esto:

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 
    } 
} 

Así que en cada petición ambos métodos se ejecutará automáticamente. Por supuesto, puede pensar "¿por qué no simplemente sobrecargar el método de inicio de búsqueda?" pero antes que nada los eventos le permiten no extender la clase para ejecutar un código repetido y también le permiten ejecutar diferentes métodos de diferentes clases declaradas en diferentes lugares. para que pueda agregar

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

en cualquier otra parte de su solicitud junto con los controladores de eventos anteriores y obtendrá ejecutar tanto Y->writeStatsYClass->someMethod y después de procesar la solicitud. Esto con comportamientos le permite crear componentes de extensión de casi cualquier complejidad sin cambiar el código fuente y sin la extensión de las clases base de Yii.

+0

Entonces, ¿en qué parte de la estructura del proyecto debe vivir el clas si lo agrego al archivo de configuración? – RicardoE

1

Creo que se puede hacer esto casi en cualquier lugar en sus archivos antes de que comience cualquier salida, por lo que debería funcionar en una clase de controlador, la vista o la costumbre, que normalmente se encuentra en el "protegido "carpeta en una aplicación web Yii. FYI, esos archivos no son archivos centrales y pueden editarse (casi) libremente, como se aplicó a los archivos de marcos Yii (como se hace referencia en la varilla "$ yii" en el archivo bootstrap index.php).

las funciones se ven como:

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

que huele como una evaluación ... –

+0

preguntaste cómo se hizo ... – ldg

+0

puedes hacer 'Yii :: app() -> onendRequest = function() {// hacer algo};' –