MVC доступ к классам
Чтобы получить доступ к контроллеру из которого используется компонент, вам нужно описать метод initialize() или startup(). Эти особые методы автоматически вызываются при создании компонента и первым параметром принимают указатель на контроллер. Метод initialize вызывается перед методом контроллера beforeFilter() , метод startup() вызывается после метода контроллера beforeFilter(). Если вы по какой-то причине не хотите чтобы вызывался метод startup() при создании компонента контроллером, установите параметр $disableStartup в true.
Если вы хотите вставить некую логику перед вызовом метода beforeFilter() контроллера, вам будет необходимо использовать метод initialize() компонента.
Простой текст<?phpclass CheckComponent extends Object {//вызывается перед Controller::beforeFilter()function initialize(&$controller) {// сохраняем указатель на контроллер для дальнейшего использования$this->controller =& $controller;}//вызывается после Controller::beforeFilter()function startup(&$controller) {}function redirectSomewhere($value) {// использование метода контроллера$this->controller->redirect($value);}}?>
Вы также имеете возможность использовать другие компоненты, внутри своего. Для это вам всего лишь необходимо создать переменную класса $components - массив с перечнем используемых компонентов.
Автоматически у подконтроллеров будет вызываться лишь метод initialize.
<?phpclass MyComponent extends Object {// Этот компонент использует другие конпонетыvar $components = array('Session', 'Math');function doStuff() {$result = $this->Math->doComplexOperation(1, 2);$this->Session->write('stuff', $result);}}?>
Использовать модели в компонентах вообще-то не рекомедуется, но если очень надо, то это делается так:
Простой текст<?phpclass MathComponent extends Object {function doComplexOperation($amount1, $amount2) {return $amount1 + $amount2;}function doUberComplexOperation ($amount1, $amount2) {$userInstance = ClassRegistry::init('User');$totalUsers = $userInstance->find('count');return ($amount1 + $amount2) / $totalUsers;}}?>


Коментарии:
Добавить коментарий