0

0

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

DDD

DDD

发布时间:2025-11-06 11:46:24

|

506人浏览过

|

来源于php中文网

原创

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

本文详细介绍了如何在yii2框架中,通过修改和重写gridview的javascript资产文件,实现自动移除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场景造成轻微影响。

本教程将提供一种在服务器端(通过修改客户端JavaScript逻辑)解决此问题的方法,避免直接修改Yii2核心的vendor文件,确保解决方案的可维护性和升级兼容性。

解决方案概述

核心思想是拦截GridView在提交筛选器数据时,对其进行预处理。具体来说,我们将复制Yii2 GridView的默认JavaScript文件,并在其中添加逻辑,将所有空字符串的筛选参数值设置为null。Yii2在构建URL时,通常会忽略null值的参数,从而达到移除空参数的目的。最后,通过配置Yii2的AssetManager,让系统使用我们修改后的JavaScript文件,而不是默认的。

实施步骤

1. 复制并修改 yii.gridView.js 文件

首先,我们需要将Yii2 GridView的默认JavaScript文件复制到项目可控的目录中,例如 web/js。这样做是为了避免直接修改 vendor 目录下的文件,从而保证Yii2框架更新时,我们的修改不会被覆盖。

  1. 找到源文件: Yii2 GridView的JavaScript文件通常位于 vendor/yiisoft/yii2/assets/yii.gridView.js。请将其复制。

  2. 粘贴到目标目录: 将复制的文件粘贴到您的项目 web/js 目录下(如果 js 目录不存在,请创建它)。

  3. 修改文件内容: 打开 web/js/yii.gridView.js 文件。找到 applyFilter 方法。在该方法内部,在 var pos = settings.filterUrl.indexOf('?'); 这行代码之前,添加以下JavaScript代码片段:

    // 在此处添加代码,用于移除空值的查询参数
    $.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。

Designs.ai
Designs.ai

AI设计工具

下载

在 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参数的问题。这种解决方案的优势在于:

  1. 避免修改核心文件: 不触碰 vendor 目录下的任何文件,确保Yii2框架升级的顺畅。
  2. 易于维护: 所有自定义逻辑集中在项目可控的 web/js 目录下,方便管理和调试。
  3. 提升用户体验: 简洁的URL更具可读性和分享性。

此方法提供了一种优雅且实用的方式来优化Yii2应用程序的URL结构,特别适用于那些需要频繁使用GridView筛选功能的场景。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

778

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

624

2023.11.24

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

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

精品课程

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

共137课时 | 10万人学习

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

共6课时 | 11.2万人学习

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

共13课时 | 0.9万人学习

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

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