mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	Changed the signature of urlCreator and button creators for yii\gridview\ActionColumn
				
					
				
			This commit is contained in:
		@ -38,7 +38,7 @@ Yii Framework 2 Change Log
 | 
				
			|||||||
- Chg: Renamed `ActiveRecord::getPopulatedRelations()` to `getRelatedRecords()` (qiangxue)
 | 
					- Chg: Renamed `ActiveRecord::getPopulatedRelations()` to `getRelatedRecords()` (qiangxue)
 | 
				
			||||||
- Chg: Renamed `attributeName` and `className` to `targetAttribute` and `targetClass` for `UniqueValidator` and `ExistValidator` (qiangxue)
 | 
					- Chg: Renamed `attributeName` and `className` to `targetAttribute` and `targetClass` for `UniqueValidator` and `ExistValidator` (qiangxue)
 | 
				
			||||||
- Chg: Added `yii\widgets\InputWidget::options` (qiangxue)
 | 
					- Chg: Added `yii\widgets\InputWidget::options` (qiangxue)
 | 
				
			||||||
- Chg: The signature for `yii\gridview\ActionColumn::urlCreator` is changed - the `$action` parameter is moved to the first (qiangxue)
 | 
					- Chg: Changed the signature of `urlCreator` and button creators for `yii\gridview\ActionColumn` (qiangxue)
 | 
				
			||||||
- New #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul)
 | 
					- New #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul)
 | 
				
			||||||
- New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo)
 | 
					- New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -26,40 +26,68 @@ class ActionColumn extends Column
 | 
				
			|||||||
	 * to each action name to form the route of the action.
 | 
						 * to each action name to form the route of the action.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public $controller;
 | 
						public $controller;
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @var string the template used for composing each cell in the action column.
 | 
				
			||||||
 | 
						 * Tokens enclosed within curly brackets are treated as controller action IDs (also called *button names*
 | 
				
			||||||
 | 
						 * in the context of action column). They will be replaced by the corresponding button rendering callbacks
 | 
				
			||||||
 | 
						 * specified in [[buttons]]. For example, the token `{view}` will be replaced by the result of
 | 
				
			||||||
 | 
						 * the callback `buttons['view']`. If a callback cannot be found, the token will be replaced with an empty string.
 | 
				
			||||||
 | 
						 * @see buttons
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	public $template = '{view} {update} {delete}';
 | 
						public $template = '{view} {update} {delete}';
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @var array button rendering callbacks. The array keys are the button names (without curly brackets),
 | 
				
			||||||
 | 
						 * and the values are the corresponding button rendering callbacks. The callbacks should use the following
 | 
				
			||||||
 | 
						 * signature:
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * ```php
 | 
				
			||||||
 | 
						 * function ($url, $model) {
 | 
				
			||||||
 | 
						 *     // return the button HTML code
 | 
				
			||||||
 | 
						 * }
 | 
				
			||||||
 | 
						 * ```
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * where `$url` is the URL that the column creates for the button, and `$model` is the model object
 | 
				
			||||||
 | 
						 * being rendered for the current row.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	public $buttons = [];
 | 
						public $buttons = [];
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @var callback a callback that creates a button URL using the specified model information.
 | 
				
			||||||
 | 
						 * The signature of the callback should be the same as that of [[createUrl()]].
 | 
				
			||||||
 | 
						 * If this property is not set, button URLs will be created using [[createUrl()]].
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	public $urlCreator;
 | 
						public $urlCreator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @inheritdoc
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	public function init()
 | 
						public function init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		parent::init();
 | 
							parent::init();
 | 
				
			||||||
		$this->initDefaultButtons();
 | 
							$this->initDefaultButtons();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Initializes the default button rendering callbacks
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	protected function initDefaultButtons()
 | 
						protected function initDefaultButtons()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (!isset($this->buttons['view'])) {
 | 
							if (!isset($this->buttons['view'])) {
 | 
				
			||||||
			$this->buttons['view'] = function ($model, $key, $index, $column) {
 | 
								$this->buttons['view'] = function ($url, $model) {
 | 
				
			||||||
				/** @var ActionColumn $column */
 | 
					 | 
				
			||||||
				$url = $column->createUrl('view', $model, $key, $index);
 | 
					 | 
				
			||||||
				return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
 | 
									return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
 | 
				
			||||||
					'title' => Yii::t('yii', 'View'),
 | 
										'title' => Yii::t('yii', 'View'),
 | 
				
			||||||
				]);
 | 
									]);
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (!isset($this->buttons['update'])) {
 | 
							if (!isset($this->buttons['update'])) {
 | 
				
			||||||
			$this->buttons['update'] = function ($model, $key, $index, $column) {
 | 
								$this->buttons['update'] = function ($url, $model) {
 | 
				
			||||||
				/** @var ActionColumn $column */
 | 
					 | 
				
			||||||
				$url = $column->createUrl('update', $model, $key, $index);
 | 
					 | 
				
			||||||
				return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [
 | 
									return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [
 | 
				
			||||||
					'title' => Yii::t('yii', 'Update'),
 | 
										'title' => Yii::t('yii', 'Update'),
 | 
				
			||||||
				]);
 | 
									]);
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (!isset($this->buttons['delete'])) {
 | 
							if (!isset($this->buttons['delete'])) {
 | 
				
			||||||
			$this->buttons['delete'] = function ($model, $key, $index, $column) {
 | 
								$this->buttons['delete'] = function ($url, $model) {
 | 
				
			||||||
				/** @var ActionColumn $column */
 | 
					 | 
				
			||||||
				$url = $column->createUrl('delete', $model, $key, $index);
 | 
					 | 
				
			||||||
				return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [
 | 
									return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [
 | 
				
			||||||
					'title' => Yii::t('yii', 'Delete'),
 | 
										'title' => Yii::t('yii', 'Delete'),
 | 
				
			||||||
					'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'),
 | 
										'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'),
 | 
				
			||||||
@ -70,11 +98,13 @@ class ActionColumn extends Column
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @param string $action
 | 
						 * Creates a URL for the given action and model.
 | 
				
			||||||
	 * @param \yii\db\ActiveRecord $model
 | 
						 * This method is called for each button and each row.
 | 
				
			||||||
 | 
						 * @param string $action the button name (or action ID)
 | 
				
			||||||
 | 
						 * @param \yii\db\ActiveRecord $model the data model
 | 
				
			||||||
	 * @param mixed $key the key associated with the data model
 | 
						 * @param mixed $key the key associated with the data model
 | 
				
			||||||
	 * @param integer $index
 | 
						 * @param integer $index the current row index
 | 
				
			||||||
	 * @return string
 | 
						 * @return string the created URL
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public function createUrl($action, $model, $key, $index)
 | 
						public function createUrl($action, $model, $key, $index)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -95,7 +125,8 @@ class ActionColumn extends Column
 | 
				
			|||||||
		return preg_replace_callback('/\\{(\w+)\\}/', function ($matches) use ($model, $key, $index) {
 | 
							return preg_replace_callback('/\\{(\w+)\\}/', function ($matches) use ($model, $key, $index) {
 | 
				
			||||||
			$name = $matches[1];
 | 
								$name = $matches[1];
 | 
				
			||||||
			if (isset($this->buttons[$name])) {
 | 
								if (isset($this->buttons[$name])) {
 | 
				
			||||||
				return call_user_func($this->buttons[$name], $model, $key, $index, $this);
 | 
									$url = $this->createUrl($name, $model, $key, $index);
 | 
				
			||||||
 | 
									return call_user_func($this->buttons[$name], $url, $model);
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				return '';
 | 
									return '';
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user