You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中间件如何为请求及重定向添加查询字符串?

解决方案

1. 创建中间件

先生成处理逻辑的中间件:

php artisan make:middleware AppendAuthQueryParam

2. 编写中间件核心逻辑

打开app/Http/Middleware/AppendAuthQueryParam.php,替换handle方法内容:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class AppendAuthQueryParam
{
    public function handle(Request $request, Closure $next)
    {
        // 检查会话标记,这里假设会话键为'needs_auth_param'
        if ($request->session()->has('needs_auth_param')) {
            // 给当前请求的查询字符串追加参数(避免重复添加)
            if (!$request->query->has('test')) {
                $request->query->add(['test' => 'test']);
            }

            $response = $next($request);

            // 拦截重定向响应,自动追加查询参数
            if ($response instanceof RedirectResponse) {
                $targetUrl = $response->getTargetUrl();
                $urlParts = parse_url($targetUrl);
                parse_str($urlParts['query'] ?? '', $queryParams);

                if (!isset($queryParams['test'])) {
                    $queryParams['test'] = 'test';
                    $newQuery = http_build_query($queryParams);
                    $newUrl = "{$urlParts['scheme']}://{$urlParts['host']}{$urlParts['path'] ?? ''}?{$newQuery}";
                    $response->setTargetUrl($newUrl);
                }
            }

            return $response;
        }

        return $next($request);
    }
}

3. 注册全局中间件

打开app/Http/Kernel.php,将中间件加入web中间件组,确保所有Web请求都能触发该逻辑:

protected $middlewareGroups = [
    'web' => [
        // ... 其他已存在的中间件
        \App\Http\Middleware\AppendAuthQueryParam::class,
    ],
];

为什么之前的方法不生效?

  • URL::defaults(['test'=>'test']):此方法用于设置路由参数的默认值,并非查询字符串参数,不会出现在URL的?后缀中。
  • $request->merge(['test'=>'test']):该方法仅合并POST/PUT等请求的表单请求体,不会修改GET请求的查询字符串,重定向也不会继承这些参数。
  • $request->fullUrlWithQuery(['test' => 'test']):这只是生成带参数的URL字符串,但未将其绑定到重定向逻辑中,因此不会实际生效。

内容的提问来源于stack exchange,提问作者Neil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:42:24