Yii Framework Forum: Вызов Функции Основного Класса Controller Из Наследуемых Контроллеров - Yii Framework Forum

Jump to content

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

Вызов Функции Основного Класса Controller Из Наследуемых Контроллеров Rate Topic: -----

#1 User is offline   almix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 29
  • Joined: 23-September 11

Posted 10 September 2013 - 09:30 AM

В Controller.php добавил:

// описываем событие onNewComment
	protected function onNewParticipant($event) {
		$this->raiseEvent('onNewParticipant', $event);
	}


которую вызываю во многих контроллерах.
Например в contollers/FunboxController.php

public function actionApprove()
	{
		if(Yii::app()->request->isPostRequest)
		{
			$dancer=$this->loadModel();
			
			$notifier = new Notifier();
			// добавляем обработчик события
			$dancer->onNewParticipant = array($notifier, 'comment'); // ф-ция comment из компонента Notifier
			
			$dancer->approve();
			$this->redirect(array('unapproved'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}


В модели Funbox.php

/**
	 * Approves a comment.
	 */
	public function approve()
	{
		$this->status=Funbox::STATUS_APPROVED;
		$this->update(array('status')); 
		
		//создаём экземпляр потомка CEvent
		$event = new NewParticipantEvent($this);
		$event->dancer = $this;
		// triggering event
		$this->onNewParticipant($event); // перенёс в компонент Controller
	} 


И теперь при вызове funbox/approve возникает ошибка
Не определено свойство "Funbox.onNewParticipant".


С чем это связано? Ведь все функции из Controller наследуют и в FunboxController, которые расширяет его.

Attached File  CException.png (332.27K)
Number of downloads: 5
0

#2 User is offline   almix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 29
  • Joined: 23-September 11

Posted 10 September 2013 - 10:02 AM

приходится переносить из общего Controller.php функцию onNewParticipant в каждую из моделей

public function onNewParticipant($event) {
		$this->raiseEvent('onNewParticipant', $event);
	} 

Получается излишний код.
Как всё таки сделать эту функцию общей и прописать только в одном месте, а не повторять в каждой модели?
0

#3 User is offline   Charger 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 317
  • Joined: 03-September 11

Posted 10 September 2013 - 11:04 AM

Сделайте промежуточный класс, наследуйте модели уже от него. По аналогии с Controller'ом, который лежит в папке components, все ваши контроллеры наследуются от него, а не от CController.
1

#4 User is offline   almix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 29
  • Joined: 23-September 11

Posted 10 September 2013 - 04:48 PM

Charger, спасибо! Правда надо было общий класс модели сделать и туда вставить общую для всех моделей функцию (и все модели от него наследовать), а я в контроллер пихал. Конечно Yii ругался, что не определён метод - он ждал его в модели, а не в контроллере.
0

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