新闻中心

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

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

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。

步骤:

  1. 从vendor/yiisoft/yii2/assets/gridview/yii.gridView.js路径复制文件到您的项目目录,例如web/js/yii.gridView.js。

  2. 打开您复制的web/js/yii.gridView.js文件。

  3. 找到applyFilter方法。在该方法内部,定位到即将构建URL查询字符串的部分。具体来说,在以下这行代码之前:

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

    添加以下J*aScript代码片段:

    VALL-E VALL-E

    VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

    VALL-E 134 查看详情 VALL-E
    $.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 充电优化 

搜索