Commit 2d8a465c by Qiang Xue

Fixes issue #257: removed the $view parameter from widget methods.

parent 472902fa
...@@ -27,7 +27,7 @@ $this->registerAssetBundle('app'); ...@@ -27,7 +27,7 @@ $this->registerAssetBundle('app');
<div class="navbar"> <div class="navbar">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<?php echo Menu::widget($this, array( <?php echo Menu::widget(array(
'options' => array('class' => 'nav'), 'options' => array('class' => 'nav'),
'items' => array( 'items' => array(
array('label' => 'Home', 'url' => array('/site/index')), array('label' => 'Home', 'url' => array('/site/index')),
...@@ -44,7 +44,7 @@ $this->registerAssetBundle('app'); ...@@ -44,7 +44,7 @@ $this->registerAssetBundle('app');
<!-- /.navbar --> <!-- /.navbar -->
</div> </div>
<?php echo Breadcrumbs::widget($this, array( <?php echo Breadcrumbs::widget(array(
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(),
)); ?> )); ?>
<?php echo $content; ?> <?php echo $content; ?>
...@@ -60,7 +60,7 @@ $this->registerAssetBundle('app'); ...@@ -60,7 +60,7 @@ $this->registerAssetBundle('app');
</div> </div>
<?php $this->endBody(); ?> <?php $this->endBody(); ?>
</div> </div>
<?php echo Toolbar::widget($this); ?> <?php echo Toolbar::widget(); ?>
</body> </body>
</html> </html>
<?php $this->endPage(); ?> <?php $this->endPage(); ?>
...@@ -23,7 +23,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -23,7 +23,7 @@ $this->params['breadcrumbs'][] = $this->title;
If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
</p> </p>
<?php $form = ActiveForm::begin($this, array( <?php $form = ActiveForm::begin(array(
'options' => array('class' => 'form-horizontal'), 'options' => array('class' => 'form-horizontal'),
'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')), 'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')),
)); ?> )); ?>
...@@ -35,7 +35,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -35,7 +35,7 @@ $this->params['breadcrumbs'][] = $this->title;
$field = $form->field($model, 'verifyCode'); $field = $form->field($model, 'verifyCode');
echo $field->begin() echo $field->begin()
. $field->label() . $field->label()
. Captcha::widget($this) . Captcha::widget()
. Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium')) . Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium'))
. $field->error() . $field->error()
. $field->end(); . $field->end();
......
...@@ -14,7 +14,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -14,7 +14,7 @@ $this->params['breadcrumbs'][] = $this->title;
<p>Please fill out the following fields to login:</p> <p>Please fill out the following fields to login:</p>
<?php $form = ActiveForm::begin($this, array('options' => array('class' => 'form-horizontal'))); ?> <?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); ?>
<?php echo $form->field($model, 'username')->textInput(); ?> <?php echo $form->field($model, 'username')->textInput(); ?>
<?php echo $form->field($model, 'password')->passwordInput(); ?> <?php echo $form->field($model, 'password')->passwordInput(); ?>
<?php echo $form->field($model, 'rememberMe')->checkbox(); ?> <?php echo $form->field($model, 'rememberMe')->checkbox(); ?>
......
...@@ -218,7 +218,7 @@ methods of the `Widget` class. For example, ...@@ -218,7 +218,7 @@ methods of the `Widget` class. For example,
```php ```php
// $this refers to the View object // $this refers to the View object
// Note that you have to "echo" the result to display it // Note that you have to "echo" the result to display it
echo \yii\widgets\Menu::widget($this, array('items' => $items)); echo \yii\widgets\Menu::widget(array('items' => $items));
// $this refers to the View object // $this refers to the View object
$form = \yii\widgets\ActiveForm::begin($this); $form = \yii\widgets\ActiveForm::begin($this);
......
...@@ -410,6 +410,7 @@ class Controller extends Component ...@@ -410,6 +410,7 @@ class Controller extends Component
* Returns the view object that can be used to render views or view files. * Returns the view object that can be used to render views or view files.
* The [[render()]], [[renderPartial()]] and [[renderFile()]] methods will use * The [[render()]], [[renderPartial()]] and [[renderFile()]] methods will use
* this view object to implement the actual view rendering. * this view object to implement the actual view rendering.
* If not set, it will default to the "view" application component.
* @return View the view object that can be used to render views or view files. * @return View the view object that can be used to render views or view files.
*/ */
public function getView() public function getView()
......
...@@ -373,9 +373,10 @@ class View extends Component ...@@ -373,9 +373,10 @@ class View extends Component
*/ */
public function beginBlock($id, $renderInPlace = false) public function beginBlock($id, $renderInPlace = false)
{ {
return Block::begin($this, array( return Block::begin(array(
'id' => $id, 'id' => $id,
'renderInPlace' => $renderInPlace, 'renderInPlace' => $renderInPlace,
'view' => $this,
)); ));
} }
...@@ -406,9 +407,10 @@ class View extends Component ...@@ -406,9 +407,10 @@ class View extends Component
*/ */
public function beginContent($viewFile, $params = array()) public function beginContent($viewFile, $params = array())
{ {
return ContentDecorator::begin($this, array( return ContentDecorator::begin(array(
'viewFile' => $viewFile, 'viewFile' => $viewFile,
'params' => $params, 'params' => $params,
'view' => $this,
)); ));
} }
...@@ -442,8 +444,9 @@ class View extends Component ...@@ -442,8 +444,9 @@ class View extends Component
public function beginCache($id, $properties = array()) public function beginCache($id, $properties = array())
{ {
$properties['id'] = $id; $properties['id'] = $id;
$properties['view'] = $this;
/** @var $cache FragmentCache */ /** @var $cache FragmentCache */
$cache = FragmentCache::begin($this, $properties); $cache = FragmentCache::begin($properties);
if ($cache->getCachedContent() !== false) { if ($cache->getCachedContent() !== false) {
$this->endCache(); $this->endCache();
return false; return false;
......
...@@ -18,16 +18,6 @@ use Yii; ...@@ -18,16 +18,6 @@ use Yii;
class Widget extends Component class Widget extends Component
{ {
/** /**
* @var View the view object that this widget is associated with.
* The widget will use this view object to register any needed assets.
* This property is also required by [[render()]] and [[renderFile()]].
*/
public $view;
/**
* @var string id of the widget.
*/
private $_id;
/**
* @var integer a counter used to generate [[id]] for widgets. * @var integer a counter used to generate [[id]] for widgets.
* @internal * @internal
*/ */
...@@ -39,32 +29,19 @@ class Widget extends Component ...@@ -39,32 +29,19 @@ class Widget extends Component
*/ */
public static $_stack = array(); public static $_stack = array();
/**
* Constructor.
* @param View $view the view object that this widget is associated with.
* The widget will use this view object to register any needed assets.
* It is also required by [[render()]] and [[renderFile()]].
* @param array $config name-value pairs that will be used to initialize the object properties
*/
public function __construct($view, $config = array())
{
$this->view = $view;
parent::__construct($config);
}
/** /**
* Begins a widget. * Begins a widget.
* This method creates an instance of the calling class. It will apply the configuration * This method creates an instance of the calling class. It will apply the configuration
* to the created instance. A matching [[end()]] call should be called later. * to the created instance. A matching [[end()]] call should be called later.
* @param View $view the view object that the newly created widget is associated with.
* @param array $config name-value pairs that will be used to initialize the object properties * @param array $config name-value pairs that will be used to initialize the object properties
* @return Widget the newly created widget instance * @return Widget the newly created widget instance
*/ */
public static function begin($view, $config = array()) public static function begin($config = array())
{ {
$config['class'] = get_called_class(); $config['class'] = get_called_class();
/** @var Widget $widget */ /** @var Widget $widget */
$widget = Yii::createObject($config, $view); $widget = Yii::createObject($config);
self::$_stack[] = $widget; self::$_stack[] = $widget;
return $widget; return $widget;
} }
...@@ -93,21 +70,22 @@ class Widget extends Component ...@@ -93,21 +70,22 @@ class Widget extends Component
/** /**
* Creates a widget instance and runs it. * Creates a widget instance and runs it.
* The widget rendering result is returned by this method. * The widget rendering result is returned by this method.
* @param View $view the view object that the newly created widget is associated with.
* @param array $config name-value pairs that will be used to initialize the object properties * @param array $config name-value pairs that will be used to initialize the object properties
* @return string the rendering result of the widget. * @return string the rendering result of the widget.
*/ */
public static function widget($view, $config = array()) public static function widget($config = array())
{ {
ob_start(); ob_start();
ob_implicit_flush(false); ob_implicit_flush(false);
/** @var Widget $widget */ /** @var Widget $widget */
$config['class'] = get_called_class(); $config['class'] = get_called_class();
$widget = Yii::createObject($config, $view); $widget = Yii::createObject($config);
$widget->run(); $widget->run();
return ob_get_clean(); return ob_get_clean();
} }
private $_id;
/** /**
* Returns the ID of the widget. * Returns the ID of the widget.
* @param boolean $autoGenerate whether to generate an ID if it is not set previously * @param boolean $autoGenerate whether to generate an ID if it is not set previously
...@@ -130,6 +108,32 @@ class Widget extends Component ...@@ -130,6 +108,32 @@ class Widget extends Component
$this->_id = $value; $this->_id = $value;
} }
private $_view;
/**
* Returns the view object that can be used to render views or view files.
* The [[render()]] and [[renderFile()]] methods will use
* this view object to implement the actual view rendering.
* If not set, it will default to the "view" application component.
* @return View the view object that can be used to render views or view files.
*/
public function getView()
{
if ($this->_view === null) {
$this->_view = Yii::$app->getView();
}
return $this->_view;
}
/**
* Sets the view object to be used by this widget.
* @param View $view the view object that can be used to render views or view files.
*/
public function setView($view)
{
$this->_view = $view;
}
/** /**
* Executes the widget. * Executes the widget.
*/ */
...@@ -159,7 +163,7 @@ class Widget extends Component ...@@ -159,7 +163,7 @@ class Widget extends Component
public function render($view, $params = array()) public function render($view, $params = array())
{ {
$viewFile = $this->findViewFile($view); $viewFile = $this->findViewFile($view);
return $this->view->renderFile($viewFile, $params, $this); return $this->getView()->renderFile($viewFile, $params, $this);
} }
/** /**
...@@ -171,7 +175,7 @@ class Widget extends Component ...@@ -171,7 +175,7 @@ class Widget extends Component
*/ */
public function renderFile($file, $params = array()) public function renderFile($file, $params = array())
{ {
return $this->view->renderFile($file, $params, $this); return $this->getView()->renderFile($file, $params, $this);
} }
/** /**
......
...@@ -47,7 +47,7 @@ use Yii; ...@@ -47,7 +47,7 @@ use Yii;
* } * }
* *
* // display pagination * // display pagination
* LinkPager::widget($this, array( * LinkPager::widget(array(
* 'pages' => $pages, * 'pages' => $pages,
* )); * ));
* ~~~ * ~~~
......
...@@ -23,7 +23,7 @@ use yii\helpers\Html; ...@@ -23,7 +23,7 @@ use yii\helpers\Html;
* *
* ~~~ * ~~~
* // $this is the view object currently being used * // $this is the view object currently being used
* echo Breadcrumbs::widget($this, array( * echo Breadcrumbs::widget(array(
* 'links' => array( * 'links' => array(
* array('label' => 'Sample Post', 'url' => array('post/edit', 'id' => 1)), * array('label' => 'Sample Post', 'url' => array('post/edit', 'id' => 1)),
* 'Edit', * 'Edit',
...@@ -37,7 +37,7 @@ use yii\helpers\Html; ...@@ -37,7 +37,7 @@ use yii\helpers\Html;
* *
* ~~~ * ~~~
* // $this is the view object currently being used * // $this is the view object currently being used
* echo Breadcrumbs::widget($this, array( * echo Breadcrumbs::widget(array(
* 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(), * 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : array(),
* )); * ));
* ~~~ * ~~~
......
...@@ -27,7 +27,7 @@ use yii\helpers\Html; ...@@ -27,7 +27,7 @@ use yii\helpers\Html;
* *
* ~~~ * ~~~
* // $this is the view object currently being used * // $this is the view object currently being used
* echo Menu::widget($this, array( * echo Menu::widget(array(
* 'items' => array( * 'items' => array(
* // Important: you need to specify url as 'controller/action', * // Important: you need to specify url as 'controller/action',
* // not just as 'controller' even if default action is used. * // not just as 'controller' even if default action is used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment