新闻中心
优化Yii2 GridView URL:自动移除未使用的查询参数

本文详细介绍了如何在yii2框架中,通过修改和重写gridview的j*ascript资产文件,实现自动移除url中未使用的或空的查询参数,从而优化url的整洁性。该方法避免了直接修改yii2核心文件,保证了系统升级的兼容性,并提供了清晰的配置步骤和代码示例。
在使用Yii2框架的GridView组件时,尤其当结合自定义筛选器(Custom Filter)时,经常会遇到URL中包含大量空值查询参数的情况。例如,一个包含多个筛选条件的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不仅影响美观,也可能对用户体验和某些SEO场景造成轻微影响。
本教程将提供一种在服务器端(通过修改客户端J*aScript逻辑)解决此问题的方法,避免直接修改Yii2核心的vendor文件,确保解决方案的可维护性和升级兼容性。
解决方案概述
核心思想是拦截GridView在提交筛选器数据时,对其进行预处理。具体来说,我们将复制Yii2 GridView的默认J*aScript文件,并在其中添加逻辑,将所有空字符串的筛选参数值设置为null。Yii2在构建URL时,通常会忽略null值的参数,从而达到移除空参数的目的。最后,通过配置Yii2的AssetManager,让系统使用我们修改后的J*aScript文件,而不是默认的。
实施步骤
1. 复制并修改 yii.gridView.js 文件
首先,我们需要将Yii2 GridView的默认J*aScript文件复制到项目可控的目录中,例如 web/js。这样做是为了避免直接修改 vendor 目录下的文件,从而保证Yii2框架更新时,我们的修改不会被覆盖。
找到源文件: Yii2 GridView的J*aScript文件通常位于 vendor/yiisoft/yii2/assets/yii.gridView.js。请将其复制。
粘贴到目标目录: 将复制的文件粘贴到您的项目 web/js 目录下(如果 js 目录不存在,请创建它)。
-
修改文件内容: 打开 web/js/yii.gridView.js 文件。找到 applyFilter 方法。在该方法内部,在 var pos = settings.filterUrl.indexOf('?'); 这行代码之前,添加以下J*aScript代码片段:
// 在此处添加代码,用于移除空值的查询参数 $.each(data, function (name, value) { // 检查值是否为数组且第一个元素为空字符串 if (Array.isArray(value) && value.length > 0 && value[0].length === 0) { data[name] = null; // 将空字符串值设置为null } else if (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 > 0 && value[0].length === 0):此条件判断参数值是否为数组(例如,某些多选筛选器)且其第一个元素为空字符串。
- else if (typeof value === 'string' && value.length === 0):此条件判断参数值是否为普通字符串且为空。
- data[name] = null;:将满足上述条件的参数值设置为 null。当Yii2构建URL时,null值的参数通常会被忽略,从而达到移除空参数的目的。
2. 配置 Yii2 AssetManager
为了让Yii2使用我们修改后的 yii.gridView.js 文件,而不是其默认的,我们需要在应用程序的配置文件(通常是 config/web.php 或 config/main.php)中配置 assetManager。
刺鸟创客
一款专业高效稳定的AI内容创作平台
110
查看详情
在 components 数组中添加或修改 assetManager 配置:
'components' => [
// ... 其他组件配置 ...
'assetManager' => [
'bundles' => [
'yii\grid\GridViewAsset' => [
'sourcePath' => '@webroot/js', // 指向你复制的js文件所在的目录
'basePath' => '@webroot/js', // 指向你复制的js文件所在的目录
'baseUrl' => '@web/js', // 指向浏览器可访问的js文件所在的URL
],
],
],
// ...
],配置解释:
- yii\grid\GridViewAsset:这是Yii2 GridView组件默认使用的资产包的类名。通过覆盖此配置,我们告诉Yii2,当需要加载 GridViewAsset 时,使用我们自定义的设置。
- sourcePath:指定你修改后的 yii.gridView.js 文件在服务器上的物理路径。@webroot/js 会解析为你的项目 web 目录下的 js 文件夹。
- basePath:与 sourcePath 类似,通常指向资产文件的根目录。
- baseUrl:指定浏览器访问这些资产文件时的URL路径。@web/js 会解析为你的网站根目录下的 js 文件夹的URL。
重要提示: 请确保 sourcePath、basePath 和 baseUrl 的路径设置与您实际复制 yii.gridView.js 的位置相匹配。如果您的文件放在 web/assets/myjs 目录下,则相应的路径也应进行调整。
验证与测试
完成以上步骤后,清除浏览器缓存,然后刷新包含GridView的页面并尝试使用筛选器。您会发现,当筛选器输入框为空时,相应的查询参数将不再出现在URL中,从而使URL更加简洁。
总结
通过上述方法,我们成功地解决了Yii2 GridView生成冗余URL参数的问题。这种解决方案的优势在于:
- 避免修改核心文件: 不触碰 vendor 目录下的任何文件,确保Yii2框架升级的顺畅。
- 易于维护: 所有自定义逻辑集中在项目可控的 web/js 目录下,方便管理和调试。
- 提升用户体验: 简洁的URL更具可读性和分享性。
此方法提供了一种优雅且实用的方式来优化Yii2应用程序的URL结构,特别适用于那些需要频繁使用GridView筛选功能的场景。
以上就是优化Yii2 GridView URL:自动移除未使用的查询参数的详细内容,更多请关注php中文网其它相关文章!
# 设置为
# 遇岛 推广 营销
# 网站策划网络推广费用
# 彭山在线推广招聘网站
# 广西家具网站推广
# 青岛网站建站推广费用
# 新泰如何选择网站建设
# 岳阳网站建设系统哪个好
# 网站建设与开发答案
# 网站建设软件免费
# 昆山短视频营销推广方案
# 组中
# 第一个
# 您的
# 自定义
# 目录下
# php
# 移除
# 为空
# 系统升级
# 配置文件
# ios
# ai
# iis
# yii
# app
# 浏览器
# seo
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
抖音极速版最新版本 抖音极速版官方下载地址
在Qt QML中通过Python字典动态更新TextEdit内容的教程
处理嵌套交互式控件:前端可访问性指南
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
Mac怎么使用表情符号_Mac Emoji快捷键面板
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
C++ map遍历方法大全_C++ map迭代器使用总结
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
React Router v6 教程:构建认证保护的私有路由与重定向策略
蛙漫官方正版入口 蛙漫网页在线全集免费观看
解决Python单元测试中Mock异常方法调用计数为零的问题
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
J*aScript实现单选按钮与关联输入框的联动禁用教程
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
J*aScript数据结构转换:将对象数组按类别分组
Golang如何使用new_Go new分配内存机制讲解
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
Angular中单选按钮的正确使用与常见陷阱解析
Excel Power Pivot如何处理XML数据源 构建高级数据模型
FullCalendar 自定义按钮样式定制指南
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
c++ 命名空间怎么用 c++ namespace使用指南
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
汽水音乐在线解析 汽水音乐在线解析入口
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
PostgreSQL海量数据高效导入策略:Python与Django实践指南
快手网页版在线登录 快手网页版官网入口快速访问
一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法
Go语言中高效处理x-www-form-urlencoded表单数据
AI泡沫首次被“刺破”:GPU十年都无法存活!
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
mysql如何设置表访问权限_mysql表访问权限配置
Django模型中自动计算可用余额的实现方法
vivo云服务网页版登录 怎么登录vivo云服务网页版
俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
理解Python模块与全局变量的作用域管理
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
痛风发作了怎么办? 快速止痛和后期饮食调理


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