загрузка класса и метода компаненты до старта контроллера

Подскажите пожалуйста, как можно до старта экшена вызваного контроллера запустить определенный метод своего класса компаненты из папки components ????

на CodeIgnitor это можно было сделать добавив в настройках класс и метод в автозагрузку и он стартовал всегда до загрузки контроллера, как это сделать на Yii ?

сам спросил, сам и отвечаю… :)

к примеру возьмем компаненту Preloader

для того чтоб вызвать компаненту Preloader, необходимо:

  • создать эту компаненту

  • добавить ее в конфиге в загрузку


'preload'=>array('log','preloader'),

  • описать ее в конфиге в разделе components

'preloader'=>array( 'class'=>'application.components.preloader',),

но тут у меня возникла пара вопросов

  1. как находясь в этой компаненте узнать к каким контроллеру и экшену идет обращение

  2. как обратиться к методу check(к примеру) объекта Preloader из контролеера из проверки прав доступа


    

public function accessRules()

    {

        return array(

            array('allow',

                'expression'=>'тут не знаю как обратиться к прелоадеру к методу check',

            ),

            array('deny',

                'users'=>array('*'),

            ),

        );

    }



А почему бы не написать свое расширение класса CController, например:




class EController extends CController {

}



Положить EController.php в extensions, например, подключить его в конфиге в автозагрузку (config/main.php):




//...

    // autoloading model and component classes

    'import'=>array(

        'application.models.*',

        'application.components.*',

        'application.extensions.*',

    ),

//...



все контроллеры своего приложения теперь можно наследовать от полученного (они ничего не потеряют в функциональности):




class MyController extends EController {

}



а уже в самом EController прописать метод beforeAction($action), например, таким образом я реализовывал в одном из проектов логирование действий пользователей (по сути их "перемещение" по системе):




class EController extends CController

{

    public function beforeAction($action)

    {

        $logString = '';

        if (Yii::app()->params['logDepth'] === 'actions')

        {

            $logString = Yii::app()->user->name . ';' . $action->id . ';' . $this->id;

            Yii::log($logString, 'syslog', 'user.trace');

        }

        return true;

    }

}