Yii Framework Forum: загрузка класса и метода компаненты до старта контроллера - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

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

#1 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 13 October 2009 - 07:45 AM

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

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

#2 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 13 October 2009 - 08:46 AM

сам спросил, сам и отвечаю... :)
к примеру возьмем компаненту 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('*'),
            ),
        );
    }

0

#3 User is offline   Sergey Kuznetsov 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 93
  • Joined: 16-February 09
  • Location:Russia, Saratov

Posted 15 October 2009 - 10:43 AM

А почему бы не написать свое расширение класса 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;
    }
}

http://summercode.com - Just an info page.
http://wiki.summercode.com/ - Many articles and tips about programming, patterns, language, SCMs, server administration and other stuff.
http://careers.stack...ergey-kuznetsov - CV page.
1

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users