yii-widget-factory ¶
https://github.com/petrgrishin/yii-widget-factory/
Фабрика виджетов 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();
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.