From 2d8a465c2fe6c6b35980b89e2b36f780256ed24a Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Tue, 14 May 2013 07:24:37 -0400 Subject: [PATCH] Fixes issue #257: removed the $view parameter from widget methods. --- apps/bootstrap/protected/views/layouts/main.php | 6 +-- apps/bootstrap/protected/views/site/contact.php | 4 +- apps/bootstrap/protected/views/site/login.php | 2 +- docs/guide/upgrade-from-v1.md | 2 +- yii/base/Controller.php | 1 + yii/base/View.php | 9 ++-- yii/base/Widget.php | 66 +++++++++++++------------ yii/web/Pagination.php | 2 +- yii/widgets/Breadcrumbs.php | 4 +- yii/widgets/Menu.php | 2 +- 10 files changed, 53 insertions(+), 45 deletions(-) diff --git a/apps/bootstrap/protected/views/layouts/main.php b/apps/bootstrap/protected/views/layouts/main.php index 05f7259..635e118 100644 --- a/apps/bootstrap/protected/views/layouts/main.php +++ b/apps/bootstrap/protected/views/layouts/main.php @@ -27,7 +27,7 @@ $this->registerAssetBundle('app'); - + endPage(); ?> diff --git a/apps/bootstrap/protected/views/site/contact.php b/apps/bootstrap/protected/views/site/contact.php index 4fa0db5..e740d0f 100644 --- a/apps/bootstrap/protected/views/site/contact.php +++ b/apps/bootstrap/protected/views/site/contact.php @@ -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.

- array('class' => 'form-horizontal'), 'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')), )); ?> @@ -35,7 +35,7 @@ $this->params['breadcrumbs'][] = $this->title; $field = $form->field($model, 'verifyCode'); echo $field->begin() . $field->label() - . Captcha::widget($this) + . Captcha::widget() . Html::activeTextInput($model, 'verifyCode', array('class' => 'input-medium')) . $field->error() . $field->end(); diff --git a/apps/bootstrap/protected/views/site/login.php b/apps/bootstrap/protected/views/site/login.php index 7d2fed2..f676b98 100644 --- a/apps/bootstrap/protected/views/site/login.php +++ b/apps/bootstrap/protected/views/site/login.php @@ -14,7 +14,7 @@ $this->params['breadcrumbs'][] = $this->title;

Please fill out the following fields to login:

- array('class' => 'form-horizontal'))); ?> + array('class' => 'form-horizontal'))); ?> field($model, 'username')->textInput(); ?> field($model, 'password')->passwordInput(); ?> field($model, 'rememberMe')->checkbox(); ?> diff --git a/docs/guide/upgrade-from-v1.md b/docs/guide/upgrade-from-v1.md index f02f825..c89b3e8 100644 --- a/docs/guide/upgrade-from-v1.md +++ b/docs/guide/upgrade-from-v1.md @@ -218,7 +218,7 @@ methods of the `Widget` class. For example, ```php // $this refers to the View object // 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 $form = \yii\widgets\ActiveForm::begin($this); diff --git a/yii/base/Controller.php b/yii/base/Controller.php index 6b6c926..55db4ed 100644 --- a/yii/base/Controller.php +++ b/yii/base/Controller.php @@ -410,6 +410,7 @@ class Controller extends Component * Returns the view object that can be used to render views or view files. * The [[render()]], [[renderPartial()]] 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() diff --git a/yii/base/View.php b/yii/base/View.php index 2a6f71f..59b2c85 100644 --- a/yii/base/View.php +++ b/yii/base/View.php @@ -373,9 +373,10 @@ class View extends Component */ public function beginBlock($id, $renderInPlace = false) { - return Block::begin($this, array( + return Block::begin(array( 'id' => $id, 'renderInPlace' => $renderInPlace, + 'view' => $this, )); } @@ -406,9 +407,10 @@ class View extends Component */ public function beginContent($viewFile, $params = array()) { - return ContentDecorator::begin($this, array( + return ContentDecorator::begin(array( 'viewFile' => $viewFile, 'params' => $params, + 'view' => $this, )); } @@ -442,8 +444,9 @@ class View extends Component public function beginCache($id, $properties = array()) { $properties['id'] = $id; + $properties['view'] = $this; /** @var $cache FragmentCache */ - $cache = FragmentCache::begin($this, $properties); + $cache = FragmentCache::begin($properties); if ($cache->getCachedContent() !== false) { $this->endCache(); return false; diff --git a/yii/base/Widget.php b/yii/base/Widget.php index 9ec690c..0c948e9 100644 --- a/yii/base/Widget.php +++ b/yii/base/Widget.php @@ -18,16 +18,6 @@ use Yii; 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. * @internal */ @@ -39,32 +29,19 @@ class Widget extends Component */ 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. * 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. - * @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 * @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(); /** @var Widget $widget */ - $widget = Yii::createObject($config, $view); + $widget = Yii::createObject($config); self::$_stack[] = $widget; return $widget; } @@ -93,21 +70,22 @@ class Widget extends Component /** * Creates a widget instance and runs it. * 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 * @return string the rendering result of the widget. */ - public static function widget($view, $config = array()) + public static function widget($config = array()) { ob_start(); ob_implicit_flush(false); /** @var Widget $widget */ $config['class'] = get_called_class(); - $widget = Yii::createObject($config, $view); + $widget = Yii::createObject($config); $widget->run(); return ob_get_clean(); } + private $_id; + /** * Returns the ID of the widget. * @param boolean $autoGenerate whether to generate an ID if it is not set previously @@ -130,6 +108,32 @@ class Widget extends Component $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. */ @@ -159,7 +163,7 @@ class Widget extends Component public function render($view, $params = array()) { $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 */ public function renderFile($file, $params = array()) { - return $this->view->renderFile($file, $params, $this); + return $this->getView()->renderFile($file, $params, $this); } /** diff --git a/yii/web/Pagination.php b/yii/web/Pagination.php index 73c0adb..52ff517 100644 --- a/yii/web/Pagination.php +++ b/yii/web/Pagination.php @@ -47,7 +47,7 @@ use Yii; * } * * // display pagination - * LinkPager::widget($this, array( + * LinkPager::widget(array( * 'pages' => $pages, * )); * ~~~ diff --git a/yii/widgets/Breadcrumbs.php b/yii/widgets/Breadcrumbs.php index 35772e0..5d15689 100644 --- a/yii/widgets/Breadcrumbs.php +++ b/yii/widgets/Breadcrumbs.php @@ -23,7 +23,7 @@ use yii\helpers\Html; * * ~~~ * // $this is the view object currently being used - * echo Breadcrumbs::widget($this, array( + * echo Breadcrumbs::widget(array( * 'links' => array( * array('label' => 'Sample Post', 'url' => array('post/edit', 'id' => 1)), * 'Edit', @@ -37,7 +37,7 @@ use yii\helpers\Html; * * ~~~ * // $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(), * )); * ~~~ diff --git a/yii/widgets/Menu.php b/yii/widgets/Menu.php index 3da0f31..e76f11f 100644 --- a/yii/widgets/Menu.php +++ b/yii/widgets/Menu.php @@ -27,7 +27,7 @@ use yii\helpers\Html; * * ~~~ * // $this is the view object currently being used - * echo Menu::widget($this, array( + * echo Menu::widget(array( * 'items' => array( * // Important: you need to specify url as 'controller/action', * // not just as 'controller' even if default action is used.