Как использовать события в Yii - PullRequest
8 голосов
/ 14 сентября 2011

Я хочу запустить некоторый код в событии onBeginRequest.
Где я могу это сделать?Я предполагаю, что я не собираюсь добавлять это в код основной библиотеки.
Я совершенно нуб в Yii

Ответы [ 2 ]

15 голосов
/ 14 сентября 2011

Если вы хотите использовать 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.

2 голосов
/ 14 сентября 2011

Я полагаю, что вы можете сделать это практически в любом месте ваших файлов до начала любого вывода, поэтому он должен работать в контроллере, представлении или пользовательском классе, обычно расположенном в «защищенной» папке в веб-приложении Yii.К вашему сведению, эти файлы не являются основными файлами и могут (почти) свободно редактироваться, в отличие от файлов инфраструктуры Yii (на которые ссылается переменная «$ yii» в файле bootstrap index.php).

theфункции выглядят так:

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