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) {