成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Yii2 增刪改查后仍留在當(dāng)前頁的方法

raledong / 2790人閱讀

摘要:序言實(shí)現(xiàn)增刪改查操作成功后仍留在當(dāng)前頁,能給用戶一個良好的體驗(yàn)。殊途同歸,如有更好的實(shí)現(xiàn)方法,歡迎交流。需求分析實(shí)現(xiàn)增刪改查后操作成功后仍然留在當(dāng)前頁面。分析總結(jié)此方法的好處是不動核心代碼,調(diào)用方式保留了自帶的方式。

序言

實(shí)現(xiàn)增刪改查操作成功后仍留在當(dāng)前頁,能給用戶一個良好的體驗(yàn)。但是 Yii2 框架本身是沒有在增刪改查操作成功后仍留在當(dāng)前頁的效果的,要實(shí)現(xiàn)這樣的一個效果得自己寫。我的原則是不動核心代碼,始終堅(jiān)持自己的原則,現(xiàn)實(shí)現(xiàn)了我把它分享出來。殊途同歸,如有更好的實(shí)現(xiàn)方法,歡迎交流。

需求分析

1、實(shí)現(xiàn)增刪改查后操作成功后仍然留在當(dāng)前頁面。

效果圖

1、鏈接的效果圖

封裝代碼

共有兩個文件ActionColumn.php和Helper.php
1、ActionColumn.php文件

defaultButtons = [
            [
                "url" => "view",
                "icon" => "eye",
                "class" => "btn btn-success btn-xs",
                "label" => Yii::t("yii", "View"),
                "appendReturnUrl" => false,
                "url_append" => "",
                "keyParam" => "id",//是否傳id,不傳設(shè)置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 .= "
"; return $data; } }

2、Helper.php文件

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;
    }
}
視圖調(diào)用

1、直接調(diào)用,把Yii2自帶的["class" => "yiigridActionColumn"]換成我們新寫的["class" => "commoncomponentsActionColumn"]。
2、如直接調(diào)用不能滿足你的要求可以自定義鏈接,自定義鏈接的寫法如下:

[
  "class" => "commoncomponentsActionColumn",
  "urlCreator" => function($action, $model, $key, $index) use ($id) {
        //自定義鏈接傳的參數(shù)
        $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,//是否保留當(dāng)前URL,默認(rèn)為true
                   "url_append" => "",
                   "keyParam" => "id", //是否傳id,不傳設(shè)置null
                  ],
                  [
                   "url" => "update",
                   "class" => "btn btn-primary btn-xs btn-sm",
                   "label" => Yii::t("yii", "Update"),
                   "appendReturnUrl" => true,//是否保留當(dāng)前URL,默認(rèn)為true
                   "url_append" => "",
                   "keyParam" => "id", //是否傳id,不傳設(shè)置null
                  ],
                  [
                   "url" => "delete",
                   "class" => "btn btn-danger btn-xs btn-sm",
                   "label" => Yii::t("yii", "Delete"),
                   "options" => [
                        "data-action" => "delete",
                   ],
                   "appendReturnUrl" => true,//是否保留當(dāng)前URL,默認(rèn)為true
                   "url_append" => "",
                   "keyParam" => "id", //是否傳id,不傳設(shè)置null
                 ],
    ],

],

3、新增的話,這么引用 Helper::getReturnUrl()], ["class" => "btn btn-success"]) ?>

控制器邏輯

1、用get獲取returnUrl,代碼:$returnUrl = Yii::$app->request->get("returnUrl");。
2、跳轉(zhuǎn)到的URL:return $this->redirect($returnUrl);。

分析總結(jié)

1、此方法的好處是不動核心代碼,調(diào)用方式保留了Yii2自帶的方式。
2、不足之處是在自定義鏈接的時候需要把每一個操作update、view、delete都寫出來,不能用這種"template" => "{view}{update}{delete}"簡單且看著舒服能根據(jù)需求去寫了。
~本文完。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21691.html

相關(guān)文章

  • Yii2 刪改后仍留在當(dāng)前頁的方法

    摘要:序言實(shí)現(xiàn)增刪改查操作成功后仍留在當(dāng)前頁,能給用戶一個良好的體驗(yàn)。殊途同歸,如有更好的實(shí)現(xiàn)方法,歡迎交流。需求分析實(shí)現(xiàn)增刪改查后操作成功后仍然留在當(dāng)前頁面。分析總結(jié)此方法的好處是不動核心代碼,調(diào)用方式保留了自帶的方式。 序言 實(shí)現(xiàn)增刪改查操作成功后仍留在當(dāng)前頁,能給用戶一個良好的體驗(yàn)。但是 Yii2 框架本身是沒有在增刪改查操作成功后仍留在當(dāng)前頁的效果的,要實(shí)現(xiàn)這樣的一個效果得自己寫。我...

    hufeng 評論0 收藏0
  • RBAC筆記

    摘要:例如,系統(tǒng)中某個用戶辭職了,只需要將系統(tǒng)中該用戶的角色授權(quán)撤銷即可。 Q0.有哪些概念需要知道? 一些概念的具體定義如下 用戶(user): 和計(jì)算機(jī)系統(tǒng)交互的人(在許多設(shè)計(jì)方案中,單個用戶可能擁有多個登錄標(biāo)識(ID),這些標(biāo)識可能同時處于活躍狀態(tài),但身份驗(yàn)證機(jī)制可以使多個標(biāo)識匹配到某個具體的人,即用戶對于計(jì)算機(jī)系統(tǒng)來說具有唯一性) 主體(subject): 一個代表用戶行為的計(jì)算機(jī)...

    ZweiZhao 評論0 收藏0
  • 一個刪改功能的表格小demo

    摘要:項(xiàng)目中遇到的一個小功能,原來的開發(fā)的寫法可能有點(diǎn)冗余了,擴(kuò)展性不高,又出了點(diǎn)小,特此回來自己寫個類似的小,遇到的一些問題記錄一下。這個里,是不可以被污染更改的。 項(xiàng)目中遇到的一個小功能,原來的開發(fā)的寫法可能有點(diǎn)冗余了,擴(kuò)展性不高,又出了點(diǎn)小bug,特此回來自己寫個類似的小demo,遇到的一些問題記錄一下。大概這樣 一個操作保留在本地的一個小表格(簡化樣式了) 請求的數(shù)據(jù)是所有的 na...

    ideaa 評論0 收藏0
  • 13 個快速構(gòu)建 Laravel 后臺的擴(kuò)展包

    摘要:值得一提的是擴(kuò)展包不免費(fèi)用于商業(yè)用途,作者用一種人類友好的方式說你使用這個擴(kuò)展包就是應(yīng)該去掙錢的,而不是免費(fèi)的去工作這個擴(kuò)展包收費(fèi)美元。除了這些,還有五個沒有全面的審查的擴(kuò)展包。最后,還有三個優(yōu)質(zhì)的包選擇于。 showImg(https://segmentfault.com/img/remote/1460000012312105?w=2200&h=1125); 開發(fā)者們都是懶惰的,不,...

    MiracleWong 評論0 收藏0

發(fā)表評論

0條評論

raledong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<