新闻中心
Yii2 GridView URL参数优化:自动清除空值查询参数

本教程详细介绍了如何在Yii2框架中,特别是结合Kartik GridView使用时,通过修改`yii.gridView.js`文件并配置`assetManager`,实现自动移除URL中未填充或为空的查询参数。此方法避免了直接修改`vendor`目录下的文件,确保了代码的可维护性,并有效优化了URL的整洁性与可读性。
在Yii2应用中,当使用GridView(特别是集成高级过滤功能的如Kartik GridView)进行数据筛选时,经常会遇到URL中包含大量空值的查询参数,例如?fid=&post_code=&pud2_mrn=&pud2_status=PUDP&pud_status=。这些空参数虽然不影响功能,但会使URL显得冗长且不易阅读。本教程旨在提供一种在Yii2服务端层面(通过对客户端JS逻辑的定制)清除这些无用参数的专业方法,而无需依赖复杂的纯前端J*aScript解决方案。
1. 定制 yii.gridView.js 文件
为了避免直接修改vendor目录下的核心文件,我们首先需要将yii.gridView.js复制到项目可控的目录中,例如web/js。
步骤:
从vendor/yiisoft/yii2/assets/gridview/yii.gridView.js路径复制文件到您的项目目录,例如web/js/yii.gridView.js。
打开您复制的web/js/yii.gridView.js文件。
-
找到applyFilter方法。在该方法内部,定位到即将构建URL查询字符串的部分。具体来说,在以下这行代码之前:
var pos = settings.filterUrl.indexOf('?');添加以下J*aScript代码片段:
VALL-E
VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法
134
查看详情
$.each(data, function (name, value) { // 检查参数值是否为空数组或空字符串 // value[0] 通常用于访问数组中的第一个元素,对于单个字符串参数,其长度为0表示空 if (Array.isArray(value) && value.length === 1 && value[0].length === 0) { data[name] = null; // 将空值参数设置为null,以便在URL构建时被忽略 } else if (typeof value === 'string' && value.length === 0) { data[name] = null; } });代码解释:
- $.each(data, function (name, value) { ... }); 遍历即将发送到服务器的所有过滤参数。
- if (Array.isArray(value) && value.length === 1 && value[0].length === 0) 检查那些由输入框生成,但其值为空字符串的数组(例如,fid[] 形式的参数)。
- else if (typeof value === 'string' && value.length === 0) 检查单个字符串参数为空的情况。
- 将data[name] = null; 设置为null后,Yii的URL构建机制在序列化参数时会跳过这些null值的参数,从而实现从URL中移除它们。
2. 配置 Yii2 assetManager
完成对yii.gridView.js的定制后,我们需要告知Yii框架使用我们修改后的版本,而不是vendor目录中的原始版本。这通过配置应用程序的assetManager组件来实现。
在您的应用程序配置文件(通常是config/web.php或config/main.php)中,找到components部分,并添加或修改assetManager配置:
'assetManager' => [
'bundles' => [
'yii\grid\GridViewAsset' => [
// 指定定制JS文件的源路径,这里指向我们复制的JS文件所在的目录
'sourcePath' => '@webroot/js',
// 指定定制JS文件在Web可访问目录中的基础路径
'basePath' => '@webroot/js',
// 指定定制JS文件在URL中的基础URL
'baseUrl' => '@web/js', // 或者 'vendor/js' 如果你希望它在vendor子目录下
// 明确指定使用我们定制的JS文件,覆盖默认的
'js' => [
'yii.gridView.js',
],
],
],
],配置解释:
- 'yii\grid\GridViewAsset':这是GridView组件使用的Asset Bundle的类名。我们通过覆盖这个Bundle的配置来引入我们定制的JS文件。
- 'sourcePath' => '@webroot/js':告诉Asset Manager去@webroot/js目录查找源文件。
- 'basePath' => '@webroot/js':指定Asset Manager将文件发布到@webroot/js目录。
- 'baseUrl' => '@web/js':指定浏览器通过@web/js路径访问这些文件。
- 'js' => ['yii.gridView.js']:这是最关键的部分,它明确指示GridViewAsset应该加载我们自定义的yii.gridView.js文件,从而覆盖了其默认加载的vendor目录下的版本。
注意事项:
- 请根据您实际存放yii.gridView.js的路径调整sourcePath、basePath和baseUrl。如果您的文件放在web/js下,上述配置是合适的。
- 清除浏览器缓存:在修改JS文件和配置后,浏览器可能会缓存旧的JS文件。请务必清除浏览器缓存,或在开发模式下禁用缓存,以确保加载的是最新文件。
3. 验证与测试
完成上述配置后,重新加载您的GridView页面。当您使用过滤器进行筛选,并且某些过滤字段留空时,提交表单后观察URL。您会发现那些没有填充值的查询参数将不再出现在URL中,使得URL更加简洁和专业。
例如,原始URL可能为: localhost:20024/consignment?fid=&post_code=&pud2_mrn=&pud2_status=PUDP&pud_status=&mrn=
经过优化后,如果只有pud2_status被填充,URL将变为: localhost:20024/consignment?pud2_status=PUDP
总结
通过以上步骤,我们成功地在Yii2框架中实现了GridView过滤参数的URL优化。这种方法不仅解决了URL冗长的问题,而且遵循了Yii2的最佳实践,即不直接修改vendor目录下的文件,而是通过定制和assetManager配置进行扩展,从而保证了代码的可维护性和项目的长期稳定性。
以上就是Yii2
GridView URL参数优化:自动清除空值查询参数的详细内容,更多请关注php中文网其它相关文章!
# 加载
# 海沧企业网站建设电话
# 合肥柳州网站推广
# 白山网站优化多少费用
# 传统营销的推广
# 网站建设服务外包
# 推广营销部门怎么样
# 惠州网站推广收费低点
# seo工作者弱点
# 农家乐推广营销方案
# 前期网站如何推广
# 移除
# 目录中
# 设置为
# 数据处理
# 为空
# php
# 这是
# 目录下
# 您的
# yii框架
# 配置文件
# ai
# iis
# yii
# app
# 浏览器
# 前端
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示
天眼查企业查询官网入口 天眼查官方网页版查询
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
快手官方唯一登录入口 谨防山寨钓鱼网站
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题
J*a TimerTask中HashMap意外清空的深层原因与解决方案
《马克思佩恩3》早期版本曝光 UI设计曾多次调整!
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
如何使 Jest 模拟函数默认抛出错误以提高测试效率
word中如何让数字纵向排列_Word数字纵向排列方法
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
Archive of Our Own官网直达 AO3最新可用地址一览
如何提高微信支付的安全性_微信支付安全防护与设置建议
Mac怎么查看崩溃日志_Mac控制台错误报告分析
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
深入理解J*a链表中的IPosition接口与使用
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
React中useState与局部变量:理解组件状态管理与渲染机制
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
美团外卖商家服务中心入口 美团商家版官网入口
Django表单提交验证失败后保持字段值不刷新
响应式容器内容自动缩放与宽高比维持教程
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
J*a实现学校排课程序_面向对象结构化项目示例
PHP 枚举:根据字符串获取枚举案例的策略与实现
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
Win11怎么关闭快速启动_Win11彻底关机设置教程
精准捕获:如何在页面中监听除特定元素外的所有点击事件
c++ 获取系统当前时间 c++时间戳获取方法
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
圆通快递查询实时追踪 圆通物流包裹状态快速查看
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】
《刺客信条:影》PS5 Pro和Switch 2画面对比
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
一加 14R 快充无反应_一加 14R 充电优化


2025-11-05
浏览次数:次
返回列表