封装代码
共有两个文件ActionColumn.php和Helper.php1、ActionColumn.php文件
<?phpuse Closure;use kartikiconsIcon;use Yii;use yiigridColumn;use yiihelpersArrayHelper;use yiihelpersHtml;use yiihelpersUrl;use commoncomponentsHelper;/**重写ActionColumn */class ActionColumn extends Column{public $buttons; private $defaultButtons = []; private $callbackButtons;public $controller; public $urlCreator; public $url_append = ""; public $appendReturnUrl = true; //默认为true,返回当前链接 public function init() { parent::init();$this->defaultButtons = [["url" => "view","icon" => "eye","class" => "btn btn-success btn-xs","label" => Yii::t("yii", "View"),"appendReturnUrl" => false,"url_append" => "","keyParam" => "id",//是否传id,不传设置null],["url" => "update","icon" => "pencil","class" => "btn btn-primary btn-xs","label" => Yii::t("yii", "Update"),],["url" => "delete","icon" => "trash-o","class" => "btn btn-danger btn-xs","label" => Yii::t("yii", "Delete"),"options" => [ "data-action" => "delete",],] ]; if (null === $this->buttons) {$this->buttons = $this->defaultButtons; } elseif ($this->buttons instanceof Closure) {$this->callbackButtons = $this->buttons; } }public function createUrl( $action, $model, $key, $index, $appendReturnUrl = null, $url_append = null, $keyParam = "id", $attrs = [] ) { if ($this->urlCreator instanceof Closure) {return call_user_func($this->urlCreator, $action, $model, $key, $index); } else {$params = [];if (is_array($key)) {$params = $key;} else {if (is_null($keyParam) === false) { $params = [$keyParam => (string)$key];}}$params[0] = $this->controller ? $this->controller . "/" . $action : $action;foreach ($attrs as $attrName) {if ($attrName === "model") { $params["model"] = $model;} elseif ($attrName === "mainCategory.category_group_id" && $model->getMainCategory()) { $params["category_group_id"] = $model->getMainCategory()->category_group_id;} else { $params[$attrName] = $model->getAttribute($attrName);}}if (is_null($appendReturnUrl) === true) {$appendReturnUrl = $this->appendReturnUrl;}if (is_null($url_append) === true) {$url_append = $this->url_append;}if ($appendReturnUrl) {$params["returnUrl"] = Helper::getReturnUrl();}return Url::toRoute($params) . $url_append; } } protected function renderDataCellContent($model, $key, $index) {if ($this->callbackButtons instanceof Closure) {$btns = call_user_func($this->callbackButtons, $model, $key, $index, $this); if (null === $btns) {$this->buttons = $this->defaultButtons;} else {$this->buttons = $btns;} } $min_width = count($this->buttons) * 34; //34 is button-width $data = Html::beginTag("div", ["class" => "btn-group", "style" => "min-width: " . $min_width . "px"]); foreach ($this->buttons as $button) {$appendReturnUrl = ArrayHelper::getValue($button, "appendReturnUrl", $this->appendReturnUrl);$url_append = ArrayHelper::getValue($button, "url_append", $this->url_append);$keyParam = ArrayHelper::getValue($button, "keyParam", "id");$attrs = ArrayHelper::getValue($button, "attrs", []);Html::addCssClass($button, "btn");Html::addCssClass($button, "btn-sm");$buttonText = isset($button["text"]) ? " " . $button["text"] : ""; $data .= Html::a( $button["label"] . $buttonText, $url = $this->createUrl( $button["url"], $model, $key, $index, $appendReturnUrl, $url_append, $keyParam, $attrs ), ArrayHelper::merge( isset($button["options"]) ? $button["options"] : [], [//"data-pjax" => 0,// "data-action" => $button["url"],"class" => $button["class"],"title" => $button["label"], ] )) . " "; } $data .= "</div>";return $data; }}2、Helper.php文件
<?phpuse Yii;class Helper{private static $returnUrl; public static $returnUrlWithoutHistory = false; /** * @param int $depth * @return string */ public static function getReturnUrl() { if (is_null(self::$returnUrl)) {$url = parse_url(Yii::$app->request->url);$returnUrlParams = [];if (isset($url["query"])) {$parts = explode("&", $url["query"]);foreach ($parts as $part) { $pieces = explode("=", $part); if (static::$returnUrlWithoutHistory && count($pieces) == 2 && $pieces[0] === "returnUrl") { continue; } if (count($pieces) == 2 && strlen($pieces[1]) > 0) { $returnUrlParams[] = $part; }}}if (count($returnUrlParams) > 0) {self::$returnUrl = $url["path"] . "?" . implode("&", $returnUrlParams);} else {self::$returnUrl = $url["path"];} } return self::$returnUrl; }}视图调用
["class" => "yiigridActionColumn"]
换成我们新写的["class" => "commoncomponentsActionColumn"]
。[ "class" => "commoncomponentsActionColumn", "urlCreator" => function($action, $model, $key, $index) use ($id) { //自定义链接传的参数 $params = [$action,"option_id" => $model->option_id, "id" => $id, ]; $params["returnUrl"] = commoncomponentsHelper::getReturnUrl(); return yiihelpersUrl::toRoute($params); }, "buttons" => [ [ "url" =>"view", "class" => "btn btn-success btn-xs", "label" => Yii::t("yii", "View"), "appendReturnUrl" => false,//是否保留当前URL,默认为true "url_append" => "", "keyParam" => "id", //是否传id,不传设置null ], [ "url" => "update", "class" => "btn btn-primary btn-xs btn-sm", "label" => Yii::t("yii", "Update"), "appendReturnUrl" => true,//是否保留当前URL,默认为true "url_append" => "", "keyParam" => "id", //是否传id,不传设置null ], [ "url" => "delete", "class" => "btn btn-danger btn-xs btn-sm", "label" => Yii::t("yii", "Delete"), "options" => [ "data-action" => "delete", ], "appendReturnUrl" => true,//是否保留当前URL,默认为true "url_append" => "", "keyParam" => "id", //是否传id,不传设置null ], ],],3、新增的话,这么引用
<?= Html::a(Yii::t("yii", "Create"), ["create","returnUrl" => Helper::getReturnUrl()], ["class" => "btn btn-success"]) ?>
。$returnUrl = Yii::$app->request->get("returnUrl");
。return $this->redirect($returnUrl);
。"template" => "{view}{update}{delete}
"简单且看着舒服能根据需求去写了。