新闻中心

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

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

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

本教程详细介绍了如何在yii2框架中,通过修改gridview的j*ascript资产配置,实现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的J*aScript资产来自动清理这些参数。

解决方案概述

核心思想是拦截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('?');这一行代码。在此行代码之前,插入以下J*aScript代码:

// 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 > 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 易标AI

告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项

易标AI 135 查看详情 易标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将无法找到您的自定义J*aScript文件。
  2. 缓存清理: 在某些情况下,浏览器或Yii的资产缓存可能需要清理才能看到更改生效。您可以尝试清除浏览器缓存,或在开发模式下运行Yii(YII_ENV_DEV为true)以禁用资产缓存。
  3. 框架更新: 虽然这种方法避免了修改vendor目录,但如果Yii框架在未来的版本中对yii.gridView.js的内部结构或applyFilter方法进行了重大更改,您可能需要重新检查并更新您自定义的yii.gridView.js文件。

总结

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

以上就是Yii2 GridView URL参数清理:自动移除未使用的查询参数的详细内容,更多请关注php中文网其它相关文章!


# javascript  # java  # jquery  # js  # ajax  # 浏览器  # app  # yii  # php  # 设置为  # 网站统一性建设  # 目录下  # 吉林公司营销策划推广  # 产品营销推广语句  # 北京网站推广推荐乐云seo十年  # 大连正规seo优化站  # 能花钱推广项目的网站  # 东莞网站建设的关键之处  # 贵州正规seo推广  # 企尚seo  # 北京天猫网站推广业务  # 管理器  # 加载  # 第一个  # 是一个  # 移除  # 自定义  # 为空  # 您的  # 配置  # ios  # ai  # iis 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: WordPress插件开发:正确注册卸载钩子与避免常见陷阱  Selenium Python中处理点击后新窗口加载冻结问题的策略与实践  sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  优化大型XML文件解析:基于Python流式处理的内存高效方案  Steam官网入口直达 Steam注册及登录步骤  探索高级语言到原生C/C++的转译:挑战与内存管理策略  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  在python-socketio事件处理器中安全访问Flask应用上下文  Golang如何安装Swagger工具_GoSwagger文档生成环境  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  12306选座怎么选到特殊座位_12306特殊座位选择注意事项  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  机器学习中对数变换预测结果的反向还原  高德地图公交到站提醒失败如何解决 高德提醒权限设置  word中如何让数字纵向排列_Word数字纵向排列方法  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  c++项目目录结构应该如何组织_c++工程化项目结构规范  qq游戏跨平台入口_qq游戏多设备同步登录  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  妖精动漫免费平台 妖精动漫官网资源观看网址  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  J*aScript中正确使用querySelectorAll与复杂CSS选择器  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  曝R星经典之作开发图 设计简陋但信息密集!  css绝对定位元素脱离父容器怎么办_确保父元素position非static  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  微信网页版扫码登录入口 微信网页版二维码登录入口  如何使用纯J*aScript判断Input元素是否在特定类容器内  AI泡沫首次被“刺破”:GPU十年都无法存活!  Yandex浏览器官方网页版入口 Yandex浏览器最新版官网  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  python3时间如何用calendar输出?  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  C++ explicit关键字防止隐式转换_C++构造函数安全规范  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  c++20的std::jthread是什么_c++可中断线程与RAII式管理  高德地图沿途添加点失败如何解决 高德多点规划方法  iCloud登录入口网页版 苹果iCloud官网登录  美团外卖商家服务中心入口 美团商家版官网入口  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  如何使用Go和Martini动态服务解码后的图片  Django表单验证失败时保留用户输入数据的最佳实践  德邦快递查询平台 德邦快递物流信息查询入口  Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  蛙漫2台版漫画地址 Manwa2正版网页版链接 

搜索