Подскажите пожалуйста, как можно до старта экшена вызваного контроллера запустить определенный метод своего класса компаненты из папки components ?
на CodeIgnitor это можно было сделать добавив в настройках класс и метод в автозагрузку и он стартовал всегда до загрузки контроллера, как это сделать на Yii ?
как находясь в этой компаненте узнать к каким контроллеру и экшену идет обращение
как обратиться к методу 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;
}
}