Если вы хотите использовать onBeginRequest и onEndRequest, вы можете сделать это, добавив в файл конфигурации следующие строки:
return array (
...
'onBeginRequest'=>array('Y', 'getStats'),
'onEndRequest'=>array('Y', 'writeStats'),
...
)
или вы можете сделать это встроенным
Yii::app()->onBeginRequest= array('Y', 'getStats');
Yii::app()->onEndRequest= array('Y', 'writeStats');
гдеY
является именем класса, а getStats
и writeStats
являются методами этого класса.Теперь представьте, что у вас есть класс Y
, объявленный так:
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
}
}
Так что при каждом запросе оба метода будут запускаться автоматически.Конечно, вы можете подумать "почему бы просто не перегружать метод onBeginRequest?"но, прежде всего, события позволяют вам не расширять класс для запуска некоторого повторяющегося кода, а также они позволяют вам выполнять разные методы разных классов, объявленных в разных местах.Таким образом, вы можете добавить
Yii::app()->onEndRequest= array('YClass', 'someMethod');
в любой другой части вашего приложения вместе с предыдущими обработчиками событий, и вы получите запускать Y->writeStats
и YClass->someMethod
после обработки запроса.Это с помощью поведения позволяет создавать компоненты расширения практически любой сложности без изменения исходного кода и без расширения базовых классов Yii.