0

0

Yii2 GridView URL参数清理:自动移除未使用的查询参数

DDD

DDD

发布时间:2025-11-07 12:55:01

|

774人浏览过

|

来源于php中文网

原创

Yii2 GridView URL参数清理:自动移除未使用的查询参数

本教程详细介绍了如何在yii2框架中,通过修改gridview的javascript资产配置,实现url中未使用的或空的查询参数的自动移除,从而使url更简洁、可读。该方法避免了直接修改vendor目录文件,保证了项目维护的便捷性。

在Yii2应用中,当使用GridView组件配合自定义过滤器时,浏览器URL中常常会出现大量空的或未使用的查询参数,例如:localhost:20024/consignment?fid=&post_code=&pud2_mrn=&pud2_status=PUDP&pud_status=&pud2_remaining_date=&mrn=&mrn_status=&ioss_number=&declaration_type=&status=&entry_at=&exit_at=&created_at=。这些冗余参数不仅使URL显得混乱,也可能影响用户体验。本教程将指导您如何在不直接修改Yii核心文件的前提下,通过覆盖GridView的JavaScript资产来自动清理这些参数。

解决方案概述

核心思想是拦截GridView在构建URL时传递给jQuery AJAX请求的数据,在数据发送前将所有空字符串值转换为null。jQuery的$.param方法在序列化数据时,会自动忽略值为null的参数,从而达到清理URL的目的。为了实现这一点,我们将复制并修改yii.gridView.js文件,并通过Yii的资产管理器(assetManager)机制,让应用加载我们修改后的版本。

实施步骤

步骤一:复制并准备yii.gridView.js文件

首先,您需要将Yii2框架自带的yii.gridView.js文件复制到您的项目web目录下,例如web/js。这样做是为了避免直接修改vendor目录下的文件,确保在框架更新时不会丢失您的改动。

# 假设您的项目根目录为当前目录
cp vendor/yiisoft/yii2/assets/yii.gridView.js web/js/yii.gridView.js

步骤二:修改自定义的yii.gridView.js文件

打开您刚刚复制到web/js/yii.gridView.js的文件。找到applyFilter方法,在该方法内部,定位到var pos = settings.filterUrl.indexOf('?');这一行代码。在此行代码之前,插入以下JavaScript代码:

// web/js/yii.gridView.js
// ... (文件原有内容)

$.each(data, function (name, value) {
    // 检查值是否为数组且第一个元素为空字符串,或者值本身就是空字符串
    if ((Array.isArray(value) && value.length > 0 && value[0].length === 0) || (typeof value === 'string' && value.length === 0)) {
        data[name] = null; // 将空字符串值设置为null
    }
});

var pos = settings.filterUrl.indexOf('?');

// ... (文件原有内容)

代码解释:

  • $.each(data, function (name, value) { ... });:这行代码遍历了GridView在进行过滤时准备发送的所有查询参数。
  • if ((Array.isArray(value) && value.length youjiankuohaophpcn 0 && value[0].length === 0) || (typeof value === 'string' && value.length === 0)):这个条件判断用于识别两种情况的空值:
    • 当参数值是一个数组(例如,某些多选过滤器)且其第一个元素是空字符串时。
    • 当参数值本身就是一个空字符串时。
  • data[name] = null;:如果参数值符合上述空值条件,我们将其设置为null。当jQuery的$.param方法序列化数据时,所有值为null的键值对都将被忽略,从而不会出现在最终的URL中。

步骤三:配置Yii的资产管理器

最后一步是告诉Yii框架,当需要加载yii\grid\GridViewAsset时,使用您修改后的yii.gridView.js文件,而不是vendor目录下的原始文件。这需要在您的应用配置文件(通常是config/web.php或config/main.php)中配置assetManager组件。

在您的配置文件中,找到components数组,并添加或修改assetManager的配置如下:

AI Web Designer
AI Web Designer

AI网页设计师,快速生成个性化的网站设计

下载
// config/web.php 或 config/main.php
return [
    // ... 其他配置
    'components' => [
        // ... 其他组件
        'assetManager' => [
            'bundles' => [
                'yii\grid\GridViewAsset' => [
                    'sourcePath' => '@webroot/js', // 指向您存放修改后js文件的目录
                    'basePath' => '@webroot/js',   // 同样指向该目录
                    'baseUrl' => '@web/js',        // 指向该目录的URL别名
                ],
            ],
        ],
        // ... 其他组件
    ],
    // ... 其他配置
];

配置解释:

  • 'yii\grid\GridViewAsset':这是您要覆盖的资产包的类名。
  • 'sourcePath' => '@webroot/js':指定了Yii应该在哪里查找这个资产包的源文件。@webroot是一个别名,通常指向您的web目录。
  • 'basePath' => '@webroot/js':指定了资产发布后存储的基路径。在这里,我们让它和sourcePath相同,表示直接从该目录加载。
  • 'baseUrl' => '@web/js':指定了资产发布后可访问的URL基路径。@web是您的应用web目录的URL别名。

重要提示: 请确保sourcePath、basePath和baseUrl中的路径与您实际存放yii.gridView.js文件的位置相匹配。

效果验证与注意事项

完成以上步骤后,刷新您的GridView页面并尝试使用过滤器。您会发现,URL中不再包含那些未填写或为空的查询参数,URL将变得更加简洁和可读。

注意事项:

  1. 路径准确性: 务必确保assetManager配置中的路径是正确的,否则Yii将无法找到您的自定义JavaScript文件。
  2. 缓存清理: 在某些情况下,浏览器或Yii的资产缓存可能需要清理才能看到更改生效。您可以尝试清除浏览器缓存,或在开发模式下运行Yii(YII_ENV_DEV为true)以禁用资产缓存。
  3. 框架更新: 虽然这种方法避免了修改vendor目录,但如果Yii框架在未来的版本中对yii.gridView.js的内部结构或applyFilter方法进行了重大更改,您可能需要重新检查并更新您自定义的yii.gridView.js文件。

总结

通过以上步骤,您已经成功地在Yii2应用中实现了GridView URL查询参数的自动清理。这种方法不仅提供了一个干净、专业的解决方案,而且遵循了Yii2的最佳实践,避免了对核心框架文件的直接修改,从而保证了项目的可维护性和升级的便捷性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

406

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

515

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

312

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

128

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号