Как вызвать функцию из контроллера в yii?
Ответ
Понятное дело, что вызвать необходимо не в самом контроллере.
Первый способ: сделать данную функцию статической (то есть добавить ключевое слово static):
1 2 3 4 5 6 7 8 9 |
class ImportantController extends Controller { ... public static function getSomethingImportant() { return 'important info'; } ... } |
Тогда вызов этой функции, например, в виджете, осуществляется таким образом:
1 2 3 4 5 6 7 8 9 |
class QuoteWidget extends CWidget { public function run() { $this->render('quote', array( 'quote' => ImportantController::getSomethingImportant() )); } } |
Второй способ:
1 2 3 4 5 6 7 8 9 |
class QuoteWidget extends CWidget { public function run() { list($imp) = Yii::app()->createController('important'); $info=$imp->getSomethingImportant(); $this->render('quote', array('quote' => $info)); } } |
Здесь без list() будет Fatal error (стоит исследовать причину).
Заметим, что есть такой принцип MVC: “тонкий контроллер, толстая модель” (почитайте об этом). И важно строже проводить границу между контроллерами, моделями и видами. Поэтому если у вас возникла такая проблема как вызов метода из другого контроллера, возможно, этот метод должен находиться в модели. Еще вспомните о хелперах.