From dd9facceed963fdd9ecfa3db218dfb95a0c0fae5 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Fri, 29 Nov 2013 20:34:06 -0500 Subject: [PATCH] Added $key parameter to several methods in grid view. --- framework/yii/base/Widget.php | 2 +- framework/yii/grid/ActionColumn.php | 34 ++++++++++++--------------- framework/yii/grid/CheckboxColumn.php | 9 +++---- framework/yii/grid/Column.php | 12 ++++++---- framework/yii/grid/DataColumn.php | 7 ++++-- framework/yii/grid/GridView.php | 2 +- framework/yii/grid/SerialColumn.php | 7 ++---- 7 files changed, 34 insertions(+), 39 deletions(-) diff --git a/framework/yii/base/Widget.php b/framework/yii/base/Widget.php index a0f77958ee..c64cdf485a 100644 --- a/framework/yii/base/Widget.php +++ b/framework/yii/base/Widget.php @@ -121,7 +121,7 @@ class Widget extends Component implements ViewContextInterface * 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. + * @return \yii\web\View the view object that can be used to render views or view files. */ public function getView() { diff --git a/framework/yii/grid/ActionColumn.php b/framework/yii/grid/ActionColumn.php index 2ee1db2910..707d41151d 100644 --- a/framework/yii/grid/ActionColumn.php +++ b/framework/yii/grid/ActionColumn.php @@ -32,27 +32,27 @@ class ActionColumn extends Column protected function initDefaultButtons() { if (!isset($this->buttons['view'])) { - $this->buttons['view'] = function ($model, $column) { + $this->buttons['view'] = function ($model, $key, $index, $column) { /** @var ActionColumn $column */ - $url = $column->createUrl($model, 'view'); + $url = $column->createUrl($model, $key, $index, 'view'); return Html::a('', $url, [ 'title' => Yii::t('yii', 'View'), ]); }; } if (!isset($this->buttons['update'])) { - $this->buttons['update'] = function ($model, $column) { + $this->buttons['update'] = function ($model, $key, $index, $column) { /** @var ActionColumn $column */ - $url = $column->createUrl($model, 'update'); + $url = $column->createUrl($model, $key, $index, 'update'); return Html::a('', $url, [ 'title' => Yii::t('yii', 'Update'), ]); }; } if (!isset($this->buttons['delete'])) { - $this->buttons['delete'] = function ($model, $column) { + $this->buttons['delete'] = function ($model, $key, $index, $column) { /** @var ActionColumn $column */ - $url = $column->createUrl($model, 'delete'); + $url = $column->createUrl($model, $key, $index, 'delete'); return Html::a('', $url, [ 'title' => Yii::t('yii', 'Delete'), 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'), @@ -64,34 +64,30 @@ class ActionColumn extends Column /** * @param \yii\db\ActiveRecord $model + * @param mixed $key the key associated with the data model + * @param integer $index * @param string $action * @return string */ - public function createUrl($model, $action) + public function createUrl($model, $key, $index, $action) { if ($this->urlCreator instanceof Closure) { - return call_user_func($this->urlCreator, $model, $action); + return call_user_func($this->urlCreator, $model, $key, $index, $action); } else { - $params = $model->getPrimaryKey(true); - if (count($params) === 1) { - $params = ['id' => reset($params)]; - } + $params = is_array($key) ? $key : ['id' => $key]; return Yii::$app->controller->createUrl($action, $params); } } /** - * Renders the data cell content. - * @param mixed $model the data model - * @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]]. - * @return string the rendering result + * @inheritdoc */ - protected function renderDataCellContent($model, $index) + protected function renderDataCellContent($model, $key, $index) { - return preg_replace_callback('/\\{(\w+)\\}/', function ($matches) use ($model) { + return preg_replace_callback('/\\{(\w+)\\}/', function ($matches) use ($model, $key, $index) { $name = $matches[1]; if (isset($this->buttons[$name])) { - return call_user_func($this->buttons[$name], $model, $this); + return call_user_func($this->buttons[$name], $model, $key, $index, $this); } else { return ''; } diff --git a/framework/yii/grid/CheckboxColumn.php b/framework/yii/grid/CheckboxColumn.php index 23f7ed03e1..6970d4b372 100644 --- a/framework/yii/grid/CheckboxColumn.php +++ b/framework/yii/grid/CheckboxColumn.php @@ -67,15 +67,12 @@ class CheckboxColumn extends Column } /** - * Renders the data cell content. - * @param mixed $model the data model - * @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]]. - * @return string the rendering result + * @inheritdoc */ - protected function renderDataCellContent($model, $index) + protected function renderDataCellContent($model, $key, $index) { if ($this->checkboxOptions instanceof Closure) { - $options = call_user_func($this->checkboxOptions, $model, $index, $this); + $options = call_user_func($this->checkboxOptions, $model, $key, $index, $this); } else { $options = $this->checkboxOptions; } diff --git a/framework/yii/grid/Column.php b/framework/yii/grid/Column.php index fa49147c95..5cc4c423ce 100644 --- a/framework/yii/grid/Column.php +++ b/framework/yii/grid/Column.php @@ -71,17 +71,18 @@ class Column extends Object /** * Renders a data cell. * @param mixed $model the data model being rendered + * @param mixed $key the key associated with the data model * @param integer $index the zero-based index of the data item among the item array returned by [[dataProvider]]. * @return string the rendering result */ - public function renderDataCell($model, $index) + public function renderDataCell($model, $key, $index) { if ($this->contentOptions instanceof Closure) { - $options = call_user_func($this->contentOptions, $model, $index, $this); + $options = call_user_func($this->contentOptions, $model, $key, $index, $this); } else { $options = $this->contentOptions; } - return Html::tag('td', $this->renderDataCellContent($model, $index), $options); + return Html::tag('td', $this->renderDataCellContent($model, $key, $index), $options); } /** @@ -117,13 +118,14 @@ class Column extends Object /** * Renders the data cell content. * @param mixed $model the data model + * @param mixed $key the key associated with the data model * @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]]. * @return string the rendering result */ - protected function renderDataCellContent($model, $index) + protected function renderDataCellContent($model, $key, $index) { if ($this->content !== null) { - return call_user_func($this->content, $model, $index, $this); + return call_user_func($this->content, $model, $key, $index, $this); } else { return $this->grid->emptyCell; } diff --git a/framework/yii/grid/DataColumn.php b/framework/yii/grid/DataColumn.php index bd6eacb733..d51af8fb3e 100644 --- a/framework/yii/grid/DataColumn.php +++ b/framework/yii/grid/DataColumn.php @@ -133,14 +133,17 @@ class DataColumn extends Column } } - protected function renderDataCellContent($model, $index) + /** + * @inheritdoc + */ + protected function renderDataCellContent($model, $key, $index) { if ($this->value !== null) { $value = call_user_func($this->value, $model, $index, $this); } elseif ($this->content === null && $this->attribute !== null) { $value = ArrayHelper::getValue($model, $this->attribute); } else { - return parent::renderDataCellContent($model, $index); + return parent::renderDataCellContent($model, $key, $index); } return $this->grid->formatter->format($value, $this->format); } diff --git a/framework/yii/grid/GridView.php b/framework/yii/grid/GridView.php index 9e470177f4..35d89b2593 100644 --- a/framework/yii/grid/GridView.php +++ b/framework/yii/grid/GridView.php @@ -366,7 +366,7 @@ class GridView extends BaseListView $cells = []; /** @var Column $column */ foreach ($this->columns as $column) { - $cells[] = $column->renderDataCell($model, $index); + $cells[] = $column->renderDataCell($model, $key, $index); } if ($this->rowOptions instanceof Closure) { $options = call_user_func($this->rowOptions, $model, $key, $index, $this); diff --git a/framework/yii/grid/SerialColumn.php b/framework/yii/grid/SerialColumn.php index 6a875ae664..8179ead0ef 100644 --- a/framework/yii/grid/SerialColumn.php +++ b/framework/yii/grid/SerialColumn.php @@ -18,12 +18,9 @@ class SerialColumn extends Column public $header = '#'; /** - * Renders the data cell content. - * @param mixed $model the data model - * @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]]. - * @return string the rendering result + * @inheritdoc */ - protected function renderDataCellContent($model, $index) + protected function renderDataCellContent($model, $key, $index) { $pagination = $this->grid->dataProvider->getPagination(); if ($pagination !== false) {