petrgrishin / yii-widget-factory
Yii widget factory
Requires
- php: >=5.3.0
- yiisoft/yii: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-12-21 17:41:11 UTC
README
Фабрика виджетов Yiiframework
Установка
Добавите зависимость для вашего проекта в composer.json:
{ "require": { "petrgrishin/yii-widget-factory": "dev-master" } }
Постановка проблемы
Необходимо использовать виджеты реализованные в модуле, которые имеют зависимости от модуля, например знание о контроллере модуля.
Решение
Реализовать в модуле создание фабрики виджетов и проинициализировать его знаниями расположеными в нем. Для использования виджета в приложении, использовать созданную фабрику.
Пример решения
####Модуль
Класс модуля. Инициализируем фабрику виджета комментариев знанием (параметр виджета listUrl
) о контроллере comments/list
, расположеном в текущем модуле.
use \PetrGrishin\WidgetFactory\WidgetFactory; class CommentsModule extends CWebModule { public function getCommentsWidgetFactory() { if (empty($this->_commentsWidgetFactory)) { $this->_commentsWidgetFactory = new WidgetFactory(); $this->_commentsWidgetFactory ->setClassName(Widgets\CommentsWidget::className()) ->setParams(array( 'listUrl' => $this->createModuleUrlBuilder('comments/list'), )); } return $this->_commentsWidgetFactory; } }
####Основное приложение Класс контроллера
class SiteController extends CController { public function actionDetail() { $this->render('detail', array( 'commentsWidgetFactory' => $this->getCommentsWidgetFactory(), )); } /** * @return \PetrGrishin\WidgetFactory\WidgetFactory */ protected function getCommentsWidgetFactory() { return $this->getCommentsModule()->getCommentsWidgetFactory() ->setView($this); } /** * @return CommentsModule */ protected function getCommentsModule() { return Yii::app()->getModule('comments'); } }
Представление контроллера и создание виджета в нем
$commentsWidget = $commentsWidgetFactory->createInstance(array('param' => 'value')); $commentsWidget->run();