ホームページ  >  記事  >  バックエンド開発  >  Yii2で追加・削除・修正・確認後に現在のページに留まる方法を詳しく解説

Yii2で追加・削除・修正・確認後に現在のページに留まる方法を詳しく解説

韦小宝
韦小宝オリジナル
2017-11-28 09:20:371690ブラウズ

追加、削除、変更、確認は操作が成功した後も現在のページに残るため、ユーザーに優れたエクスペリエンスを提供できます。ただし、Yii2 フレームワーク自体には、add、delete、modify、check 操作が成功した後に現在のページに残る効果はありません。そのような効果を実現するには、自分で記述する必要があります。私の原則は、コアコードを放置せず、常に自分自身の原則に固執することです。それを達成したので、共有します。異なるパスでも同じ目標に到達できます。追加、削除、変更、確認を実装するためのより良い方法がある場合は、お気軽にご連絡ください。コードのパッキング

actioncolumn.phpとhelper.php
1、actioncolumn.phpfile

rreee

2、helper.phpfilerreee

viewコールが2つあります。

1. これを直接呼び出して、Yii2 に付属の ['class' => 'yiigridActionColumn'] を新しく作成した ['class' => 'commoncomponentsActionColumn'] に置き換えます。

2. 直接呼び出しが要件を満たさない場合は、カスタム リンクを次のように記述できます:

<?php

use Closure;
use kartik\icons\Icon;
use Yii;
use yii\grid\Column;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\helpers\Url;
use common\components\Helper;

/*
*重写ActionColumn
 */
class ActionColumn extends Column
{ 
 public $buttons;

 private $defaultButtons = [];

 private $callbackButtons;
 
 public $controller;

 public $urlCreator;

 public $url_append = &#39;&#39;;

 public $appendReturnUrl = true; //默认为true,返回当前链接

 public function init()
 {
 parent::init();
 
 $this->defaultButtons = [
  [
  &#39;url&#39; => &#39;view&#39;,
  &#39;icon&#39; => &#39;eye&#39;,
  &#39;class&#39; => &#39;btn btn-success btn-xs&#39;,
  &#39;label&#39; => Yii::t(&#39;yii&#39;, &#39;View&#39;),
  &#39;appendReturnUrl&#39; => false,
  &#39;url_append&#39; => &#39;&#39;,
  &#39;keyParam&#39; => &#39;id&#39;,//是否传id,不传设置null
  ],
  [
  &#39;url&#39; => &#39;update&#39;,
  &#39;icon&#39; => &#39;pencil&#39;,
  &#39;class&#39; => &#39;btn btn-primary btn-xs&#39;,
  &#39;label&#39; => Yii::t(&#39;yii&#39;, &#39;Update&#39;),
  ],
  [
  &#39;url&#39; => &#39;delete&#39;,
  &#39;icon&#39; => &#39;trash-o&#39;,
  &#39;class&#39; => &#39;btn btn-danger btn-xs&#39;,
  &#39;label&#39; => Yii::t(&#39;yii&#39;, &#39;Delete&#39;),
  &#39;options&#39; => [
   &#39;data-action&#39; => &#39;delete&#39;,
  ],
  ]
 ];


 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 = &#39;id&#39;,
 $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 . &#39;/&#39; . $action : $action;
  foreach ($attrs as $attrName) {
  if ($attrName === &#39;model&#39;) {
   $params[&#39;model&#39;] = $model;
  } elseif ($attrName === &#39;mainCategory.category_group_id&#39; && $model->getMainCategory()) {
   $params[&#39;category_group_id&#39;] = $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[&#39;returnUrl&#39;] = 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(&#39;div&#39;, [&#39;class&#39; => &#39;btn-group&#39;, &#39;style&#39; => &#39;min-width: &#39; . $min_width . &#39;px&#39;]);
 foreach ($this->buttons as $button) {
  $appendReturnUrl = ArrayHelper::getValue($button, &#39;appendReturnUrl&#39;, $this->appendReturnUrl);
  $url_append = ArrayHelper::getValue($button, &#39;url_append&#39;, $this->url_append);
  $keyParam = ArrayHelper::getValue($button, &#39;keyParam&#39;, &#39;id&#39;);
  $attrs = ArrayHelper::getValue($button, &#39;attrs&#39;, []);
  Html::addCssClass($button, &#39;btn&#39;);
  Html::addCssClass($button, &#39;btn-sm&#39;);
  $buttonText = isset($button[&#39;text&#39;]) ? &#39; &#39; . $button[&#39;text&#39;] : &#39;&#39;; 
  $data .= Html::a(
   $button[&#39;label&#39;] . $buttonText,
   $url = $this->createUrl(
   $button[&#39;url&#39;],
   $model,
   $key,
   $index,
   $appendReturnUrl,
   $url_append,
   $keyParam,
   $attrs
   ),
   ArrayHelper::merge(
   isset($button[&#39;options&#39;]) ? $button[&#39;options&#39;] : [],
   [
    //&#39;data-pjax&#39; => 0,
    // &#39;data-action&#39; => $button[&#39;url&#39;],
    &#39;class&#39; => $button[&#39;class&#39;],
    &#39;title&#39; => $button[&#39;label&#39;],
   ]
   )
  ) . &#39; &#39;;
 }
 $data .= &#39;</div>&#39;; 
 return $data;
 }

}
3. 新しいリンクを追加する場合は、次のように引用します。

Controller

Logic

1. get を使用して returnUrl を取得します (コード: $returnUrl = Yii::$app->request->get('returnUrl'); )。

2. URL にジャンプします: return $this->redirect($returnUrl);

分析の概要1. このメソッドの利点は、コアコードが移動されず、呼び出しメソッドが Yii2 組み込みメソッドを保持することです。
2. 欠点は、リンクをカスタマイズするときに、更新、表示、削除の各操作を書き出す必要があることです。この「テンプレート」 => '{view}{update}{delete}' は使用できません。見やすくて快適なので、ニーズに合わせて書くことができます。

それでは、この記事の内容が皆さんの学習や仕事に少しでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。

上記は、Yii2 で追加、削除、変更、確認した後、現在のページに留まる方法の詳細な説明です。

PHP 中国語コミュニティ

で問題について議論したり交換したりすることを歓迎します。関連する推奨事項:yii2のコンポーネントの登録と作成方法の説明extailed yii2がキャメルケースネーミングを使用してコントローラーインスタンスにアクセスする方法


yii2.0フレームワーク実装コードQRコード生成機能

Yii2フレームワークの自動ログインとログイン・終了機能の実装方法

以上がYii2で追加・削除・修正・確認後に現在のページに留まる方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。