Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/petrgrishin/yii-widget-factory
Widget factory
https://github.com/petrgrishin/yii-widget-factory
Last synced: 8 days ago
JSON representation
Widget factory
- Host: GitHub
- URL: https://github.com/petrgrishin/yii-widget-factory
- Owner: petrgrishin
- Created: 2014-05-20T19:02:11.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-06-11T07:48:26.000Z (over 10 years ago)
- Last Synced: 2024-11-08T16:16:56.485Z (2 months ago)
- Language: PHP
- Size: 176 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
yii-widget-factory
==================
[![Travis CI](https://travis-ci.org/petrgrishin/yii-widget-factory.png "Travis CI")](https://travis-ci.org/petrgrishin/yii-widget-factory)
[![Coverage Status](https://coveralls.io/repos/petrgrishin/yii-widget-factory/badge.png?branch=master)](https://coveralls.io/r/petrgrishin/yii-widget-factory?branch=master)Фабрика виджетов Yiiframework
Установка
------------
Добавите зависимость для вашего проекта в composer.json:
```json
{
"require": {
"petrgrishin/yii-widget-factory": "dev-master"
}
}
```Постановка проблемы
------------
Необходимо использовать виджеты реализованные в модуле, которые имеют зависимости от модуля, например знание о контроллере модуля.Решение
------------
Реализовать в модуле создание фабрики виджетов и проинициализировать его знаниями расположеными в нем. Для использования виджета в приложении, использовать созданную фабрику.Пример решения
------------
####Модуль
Класс модуля. Инициализируем фабрику виджета комментариев знанием (параметр виджета `listUrl`) о контроллере `comments/list`, расположеном в текущем модуле.
```php
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;
}
}
```####Основное приложение
Класс контроллера
```php
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');
}
}
```Представление контроллера и создание виджета в нем
```php
$commentsWidget = $commentsWidgetFactory->createInstance(array('param' => 'value'));
$commentsWidget->run();
```