
本教程旨在解决yii2 gridview过滤后url中包含大量空值查询参数的问题。通过修改 `yii.gridview.js` 文件并配置 `assetmanager`,我们可以在不直接修改 `vendor` 目录代码的前提下,实现自动移除url中未填充的参数,从而使url更加简洁、美观且易于管理。
在Yii2应用中,当使用 GridView 组件及其自定义过滤器时,尤其是在存在大量过滤字段的情况下,用户在进行过滤操作后,浏览器地址栏的URL可能会变得非常冗长。例如,即使许多过滤字段没有被填充,它们的参数名依然会出现在URL中,且值为一个小写的 null 或空字符串,如 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和URL分享造成不便。
为了解决这一问题,我们可以在参数发送到服务器之前,通过修改 GridView 相关的JavaScript逻辑来移除这些空值参数。以下是详细的实现步骤。
由于不建议直接修改 vendor 目录下的核心文件,以避免在项目更新时被覆盖,我们需要将 yii.gridView.js 复制到项目的公共资源目录,并对其进行修改。
操作步骤:
将 vendor/yiisoft/yii2/assets/yii.gridView.js 文件复制到你的 web 目录下的一个自定义JavaScript文件夹中,例如 web/js/。
打开复制后的 web/js/yii.gridView.js 文件。
找到 applyFilter 方法,在该方法内部,定位到 var pos = settings.filterUrl.indexOf('?'); 这一行。
在这一行代码之前,添加以下JavaScript代码片段:
$.each(data, function (name, value) {
if (value[0].length === 0) {
data[name] = null;
}
});代码解释: 这段代码会遍历 GridView 过滤器发送的所有参数 (data 对象)。对于每个参数,它检查其值(通常是数组的第一个元素 value[0])的长度是否为零。如果长度为零,则表示该参数未被填充,将其值设置为 null。当URL参数被构建时,值为 null 的参数通常会被忽略,从而达到清理URL的目的。
完成JavaScript文件的修改后,Yii2仍然会默认加载 vendor 目录下的原始 yii.gridView.js。为了让系统使用我们修改后的版本,需要通过配置 assetManager 来覆盖默认的资源包。
操作步骤:
打开你的应用程序配置文件,通常是 config/web.php (或 config/main.php,取决于你的应用结构)。
在 components 配置数组中,找到或添加 assetManager 组件的配置。
在 assetManager 的 bundles 数组中,添加对 yii\grid\GridViewAsset 的覆盖配置:
'assetManager' => [
'bundles' => [
'yii\grid\GridViewAsset' => [
'sourcePath' => '@webroot/js', // 指向你复制的 yii.gridView.js 所在的目录
'basePath' => '@webroot/js', // 同上
'baseUrl' => '@web/js', // 指向该目录的URL路径
],
],
],配置解释:
完成上述步骤后,刷新你的 GridView 页面并尝试进行过滤操作。你会发现,当某些过滤字段未输入任何值时,它们对应的查询参数将不再出现在URL中,使URL变得更加整洁。
注意事项:
通过这种方法,我们既解决了URL冗余的问题,又遵循了Yii2的开发最佳实践,避免了直接修改 vendor 目录,从而保证了项目的可维护性和升级的便利性。
以上就是Yii2 GridView URL参数优化:自动移除未使用的查询参数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号