" /> ">
Maison développement back-end tutoriel php Yii2 GridView实现列表页直接修改数据的方法_PHP

Yii2 GridView实现列表页直接修改数据的方法_PHP

May 27, 2016 am 10:04 AM
yii2

什么意思呢?我来简单的描述下,小编妹子提的需求是这样的,你看啊,你这列表页的数据,能不能我就直接在列表上进行点一下就直接修改啊,我再点进去修改多麻烦,太不方便了。这尼玛,这需求,是不是真想给她一棒槌。

ok,我们今天就来看看在yii2中如何去利用gridview实现列表上直接修改的功能,很全面哦,我们尽量各种类型的属性都给出实例。

第一步,我们先来部署好yii2-grid

利用composer安装yii2-grid

1

composer require kartik-v/yii2-grid "@dev"

Copier après la connexion

如果你在安装的过程中需要让你输出Token,此时也就是需要你登录你的github帐号,通过setting>personal access tokens获取token值后输入你的token值,回车就好。

安装好了之后,我们对module进行如下配置,这个是必须要配置的

1

2

3

4

5

'modules' => [

'gridview' => [

'class' => '\kartik\grid\Module'

]

];

Copier après la connexion
Copier après la connexion

前面我们说了,要先把yii2-grid部署好,下载配置好之后,我们打开视图文件并参考下面的代码修改你的文件

1

2

3

4

5

6

7

8

9

10

// use yii\grid\GridView;

//这里屏蔽掉yii的gridview,user我们刚刚安装的gridview

use kartik\grid\GridView;

<?= GridView::widget([

//......

'export' => false,

'columns' => [

//......

],

?>

Copier après la connexion
Copier après la connexion

上面代码中我们只需要添加一项 'export' => false, 即可,你原先的gridview无需改动。

然后我们安装yii2-editable

1

composer require kartik-v/yii2-editable "@dev"

Copier après la connexion
Copier après la connexion

安装好了后,我们在刚才配置好gridview的文件中引入editable

1

use kartik\editable\Editable;

Copier après la connexion
Copier après la connexion

首先介绍下textInput类型的修改,图如下


从上图中可以很轻松的看到编辑的效果,直接贴代码

1

2

3

4

[

'attribute' => 'title',

'class'=>'kartik\grid\EditableColumn',

],

Copier après la connexion
Copier après la connexion

但是从上图中我们也看到了,弹窗式修改呢不是很方便,我们接下来看看方便点的操作方式

1

2

3

4

5

6

7

[

'attribute' => 'title',

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'asPopover' => false,

],

],

Copier après la connexion
Copier après la connexion

只需要对要修改的属性值点击一下可以直接进行修改,我们来看看这样会有什么问题

也许你发现了,编辑框的宽度太小了,操作不是很方便,我们把input改为textarea会不会好点?试试看,当然你也可以给当前单元格指定headerOptions设定宽度,关于gridview常见操作可点击参考

看图片上果然效果好很多,直接贴代码

1

2

3

4

5

6

7

8

9

10

11

[

'attribute' => 'title',

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'asPopover' => false,

'inputType'=>\kartik\editable\Editable::INPUT_TEXTAREA,

'options' => [

'rows' => 4,

],

],

],

Copier après la connexion
Copier après la connexion

有同学很好奇的点了图中的两个按钮,一个是重置按钮,另一个是应用按钮,重置还好,很容易理解,但是嘛,为啥点了应用按钮就貌似一直在处理中的意思呢?别急别急,从一开始到现在乃至接下来,我们都将先讲解view中的配置,其实这里你点击应用按钮后也就异步请求了后端,我们后面详细的说道。

如果你的column是数字类型的呢?简单嘛,input内直接修改就好了,可如果你想要下面截图中的效果,需要你继续继续利用composer安装touch spin widget

1

require kartik-v/yii2-widget-touchspin "@dev"

Copier après la connexion
Copier après la connexion

安装完毕后,我们看看数字类型的属性的修改方式

第三种,关于下拉框式的修改,我们假定字段is_delete值1显示 2删除且数据库存的值是1 2这种数字类型,看效果图然后我们再贴代码

左右两边是两个属性,为了做对比说明,左侧是不可修改的属性展示,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

[

'attribute' => 'is_delete',

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'inputType'=>\kartik\editable\Editable::INPUT_DROPDOWN_LIST,

'asPopover' => false,

'data' => Article::itemAlias('is_delete'),

],

'value' => function ($model) {

return Article::itemAlias('is_delete', $model->is_delete);

},

'filter' => Article::itemAlias('is_delete'),

],

Copier après la connexion
Copier après la connexion

第四个,我们讲解下日期组件和时间组件,先截图看效果,然后在安装

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

//日期组件

composer require kartik-v/yii2-widget-datepicker "@dev"

//时间组件

composer require kartik-v/yii2-widget-datetimepicker "*"

//日期组件

[

'attribute' => 'created_at',

//这个设定表格的宽度

// 'headerOptions' => ['width' => '150px'],

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'inputType'=>\kartik\editable\Editable::INPUT_DATE,

'asPopover' => false,

//这个设定我们组件的宽度

'contentOptions' => ['style'=>'width:180px'],

'options' => [

'pluginOptions' => [

//设定我们日期组件的格式

'format' => 'yyyy-mm-dd',

]

],

],

'format' => ['date', 'Y-m-d'],

],

//时间组件

[

'attribute' => 'updated_at',

// 'headerOptions' => ['width' => '150px'],

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'inputType'=>\kartik\editable\Editable::INPUT_DATETIME,

'asPopover' => false,

'contentOptions' => ['style'=>'width:250px'],

],

],

Copier après la connexion
Copier après la connexion

基本上就这4中类型吧,view配置好了,我们就需要配置controller层进行异步操作了,我们来看看是怎么操作的。

声明:如果你的gridview是在视图article/index内,那么接下来的操作你需要在article控制器的index内操作。

use yii\helpers\Json;
public function actionIndex()
{
$searchModel = new ArticleSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
if (Yii::$app->request->post('hasEditable')) {
$id = Yii::$app->request->post('editableKey');
$model = Article::findOne(['id' => $id]);
$out = Json::encode(['output'=>'', 'message'=>'']);
$posted = current(

什么意思呢?我来简单的描述下,小编妹子提的需求是这样的,你看啊,你这列表页的数据,能不能我就直接在列表上进行点一下就直接修改啊,我再点进去修改多麻烦,太不方便了。这尼玛,这需求,是不是真想给她一棒槌。

ok,我们今天就来看看在yii2中如何去利用gridview实现列表上直接修改的功能,很全面哦,我们尽量各种类型的属性都给出实例。

第一步,我们先来部署好yii2-grid

利用composer安装yii2-grid

1

composer require kartik-v/yii2-grid "@dev"

Copier après la connexion

如果你在安装的过程中需要让你输出Token,此时也就是需要你登录你的github帐号,通过setting>personal access tokens获取token值后输入你的token值,回车就好。

安装好了之后,我们对module进行如下配置,这个是必须要配置的

1

2

3

4

5

'modules' => [

'gridview' => [

'class' => '\kartik\grid\Module'

]

];

Copier après la connexion
Copier après la connexion

前面我们说了,要先把yii2-grid部署好,下载配置好之后,我们打开视图文件并参考下面的代码修改你的文件

1

2

3

4

5

6

7

8

9

10

// use yii\grid\GridView;

//这里屏蔽掉yii的gridview,user我们刚刚安装的gridview

use kartik\grid\GridView;

<?= GridView::widget([

//......

'export' => false,

'columns' => [

//......

],

?>

Copier après la connexion
Copier après la connexion

上面代码中我们只需要添加一项 'export' => false, 即可,你原先的gridview无需改动。

然后我们安装yii2-editable

1

composer require kartik-v/yii2-editable "@dev"

Copier après la connexion
Copier après la connexion

安装好了后,我们在刚才配置好gridview的文件中引入editable

1

use kartik\editable\Editable;

Copier après la connexion
Copier après la connexion

首先介绍下textInput类型的修改,图如下


从上图中可以很轻松的看到编辑的效果,直接贴代码

1

2

3

4

[

'attribute' => 'title',

'class'=>'kartik\grid\EditableColumn',

],

Copier après la connexion
Copier après la connexion

但是从上图中我们也看到了,弹窗式修改呢不是很方便,我们接下来看看方便点的操作方式

1

2

3

4

5

6

7

[

'attribute' => 'title',

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'asPopover' => false,

],

],

Copier après la connexion
Copier après la connexion

只需要对要修改的属性值点击一下可以直接进行修改,我们来看看这样会有什么问题

也许你发现了,编辑框的宽度太小了,操作不是很方便,我们把input改为textarea会不会好点?试试看,当然你也可以给当前单元格指定headerOptions设定宽度,关于gridview常见操作可点击参考

看图片上果然效果好很多,直接贴代码

1

2

3

4

5

6

7

8

9

10

11

[

'attribute' => 'title',

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'asPopover' => false,

'inputType'=>\kartik\editable\Editable::INPUT_TEXTAREA,

'options' => [

'rows' => 4,

],

],

],

Copier après la connexion
Copier après la connexion

有同学很好奇的点了图中的两个按钮,一个是重置按钮,另一个是应用按钮,重置还好,很容易理解,但是嘛,为啥点了应用按钮就貌似一直在处理中的意思呢?别急别急,从一开始到现在乃至接下来,我们都将先讲解view中的配置,其实这里你点击应用按钮后也就异步请求了后端,我们后面详细的说道。

如果你的column是数字类型的呢?简单嘛,input内直接修改就好了,可如果你想要下面截图中的效果,需要你继续继续利用composer安装touch spin widget

1

require kartik-v/yii2-widget-touchspin "@dev"

Copier après la connexion
Copier après la connexion

安装完毕后,我们看看数字类型的属性的修改方式

第三种,关于下拉框式的修改,我们假定字段is_delete值1显示 2删除且数据库存的值是1 2这种数字类型,看效果图然后我们再贴代码

左右两边是两个属性,为了做对比说明,左侧是不可修改的属性展示,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

[

'attribute' => 'is_delete',

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'inputType'=>\kartik\editable\Editable::INPUT_DROPDOWN_LIST,

'asPopover' => false,

'data' => Article::itemAlias('is_delete'),

],

'value' => function ($model) {

return Article::itemAlias('is_delete', $model->is_delete);

},

'filter' => Article::itemAlias('is_delete'),

],

Copier après la connexion
Copier après la connexion

第四个,我们讲解下日期组件和时间组件,先截图看效果,然后在安装

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

//日期组件

composer require kartik-v/yii2-widget-datepicker "@dev"

//时间组件

composer require kartik-v/yii2-widget-datetimepicker "*"

//日期组件

[

'attribute' => 'created_at',

//这个设定表格的宽度

// 'headerOptions' => ['width' => '150px'],

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'inputType'=>\kartik\editable\Editable::INPUT_DATE,

'asPopover' => false,

//这个设定我们组件的宽度

'contentOptions' => ['style'=>'width:180px'],

'options' => [

'pluginOptions' => [

//设定我们日期组件的格式

'format' => 'yyyy-mm-dd',

]

],

],

'format' => ['date', 'Y-m-d'],

],

//时间组件

[

'attribute' => 'updated_at',

// 'headerOptions' => ['width' => '150px'],

'class'=>'kartik\grid\EditableColumn',

'editableOptions'=>[

'inputType'=>\kartik\editable\Editable::INPUT_DATETIME,

'asPopover' => false,

'contentOptions' => ['style'=>'width:250px'],

],

],

Copier après la connexion
Copier après la connexion

基本上就这4中类型吧,view配置好了,我们就需要配置controller层进行异步操作了,我们来看看是怎么操作的。

声明:如果你的gridview是在视图article/index内,那么接下来的操作你需要在article控制器的index内操作。

1

___FCKpd___11

Copier après la connexion

关于小编给大家介绍的Yii2 GridView实现列表页直接修改数据的方法就给大家介绍到这里,希望对大家有所帮助,如果大家想了解更多内容敬请关注网站。

POST['Article']); $post = ['Article' => $posted]; if ($model->load($post)) { $model->save(); $output = ''; isset($posted['title']) && $output = $model->title; // 其他的这里就忽略了,大致可参考这个title } $out = Json::encode(['output'=>$output, 'message'=>'']); echo $out; return; } return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); }

关于小编给大家介绍的Yii2 GridView实现列表页直接修改数据的方法就给大家介绍到这里,希望对大家有所帮助,如果大家想了解更多内容敬请关注网站。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Apr 06, 2025 am 12:02 AM

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

Décrivez les principes solides et comment ils s'appliquent au développement de PHP. Décrivez les principes solides et comment ils s'appliquent au développement de PHP. Apr 03, 2025 am 12:04 AM

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment déboguer le mode CLI dans phpstorm? Comment déboguer le mode CLI dans phpstorm? Apr 01, 2025 pm 02:57 PM

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Que sont les énumérations (enums) dans PHP 8.1? Que sont les énumérations (enums) dans PHP 8.1? Apr 03, 2025 am 12:05 AM

La fonction d'énumération dans PHP8.1 améliore la clarté et la sécurité du type du code en définissant les constantes nommées. 1) Les énumérations peuvent être des entiers, des chaînes ou des objets, améliorant la lisibilité du code et la sécurité des types. 2) L'énumération est basée sur la classe et prend en charge des fonctionnalités orientées objet telles que la traversée et la réflexion. 3) L'énumération peut être utilisée pour la comparaison et l'attribution pour assurer la sécurité du type. 4) L'énumération prend en charge l'ajout de méthodes pour implémenter une logique complexe. 5) La vérification stricte et la gestion des erreurs peuvent éviter les erreurs courantes. 6) L'énumération réduit la valeur magique et améliore la maintenabilité, mais prêtez attention à l'optimisation des performances.

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Mar 31, 2025 pm 11:54 PM

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

See all articles