Intereting Posts
PHP использует строку как оператор Опубликовать результаты в COLORBOX modal Заголовок элемента меню, переопределяющий setTitle в модуле MySQL Вставка значения NULL в колонку INT аутентифицировать прокси-сервер squid throw (PHP-сокет) Как динамически генерировать ключ клиента openvpn с помощью php и передавать переменные команде shell? POST для PHP из Node.js Ошибка TokenMismatchException в строке VerifyCsrfToken.php 46 mysql_fetch_assoc (): предоставленный аргумент не является допустимым ресурсом результатов MySQL как сохранить выбранные значения в поле «Выбрать» после отправки формы? Как защитить веб-сайт от массового выскабливания / загрузки? Как структурировать этот веб-проект Symfony? Google App-Gmail Невозможно установить. Gmail, заменяющий адрес при отправке через SMTP-транспорт Swiftmailer (PHP) Удалить строку в пользовательском wp db Сессионные файлы cookie http и secure flag – как вы их устанавливаете?

Как использовать события в Yii

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

    Если вы хотите использовать onBeginRequest и onEndRequest, вы можете сделать это, добавив следующие строки в ваш файл конфигурации:

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

    или вы можете сделать это inline

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

    Поэтому при каждом запросе оба метода будут запускаться автоматически. Конечно, вы можете подумать: «Почему бы просто не перегрузить метод BeginRequest?» но, прежде всего, события позволяют не расширять класс для запуска повторного кода, а также позволяют выполнять различные методы разных классов, объявленных в разных местах. Таким образом, вы можете добавить

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

    в любой другой части вашего приложения вместе с предыдущими обработчиками событий, и вы получите запуск Y->writeStats и YClass->someMethod после обработки запроса. Это с поведением позволяет создавать компоненты расширения практически любой сложности без изменения исходного кода и без расширения базовых классов Yii.

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

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

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