Laravel如何删除URL查询参数?

Don*_*nne 1 laravel

我请求api检查用户,并且backurl将添加一个查询参数 令牌,如下所示:

www.test.com?store_id=2&token = 123
Run Code Online (Sandbox Code Playgroud)

我想展示这个

 www.test.com?store_id=2
Run Code Online (Sandbox Code Playgroud)

我在中间件中处理它,我希望以前有个方法可以删除令牌return $next($request) 但是我没有找到方法。而且我不能只使用某种方法来删除此参数并重定向,这将导致重定向循环。如果没有更好的方法,也许我将在LoginController中创建一个新方法以删除令牌并重定向到我来自的页面。

apo*_*fos 5

您可以使用某种全球中间件:

class  RedirectIfTokenInRequest {
      public function handle($request,$next) {
             if ($request->token) {
                return redirect()->to(url()->current().'?'.http_build_query($request->except("token")));
             }
             return $next($request);
      } 
}
Run Code Online (Sandbox Code Playgroud)

如果那里有一个令牌参数,它将只是重定向。如果您需要以某种方式存储它,则可以session(["token" => $request->token]);在重定向之前使用它来存储它。


Mar*_*ski 5

中间件是最好的选择。您可以将中间件类附加到路由、Web 或单个方法。我的中间件建议:

namespace App\Http\Middleware;

use Closure;

class ClearFromAttributes
{
    /**
     * Remove some attributes which makes some confusion.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->get('unwanted_param')) {
            return $this->removeFromQueryAndRedirect($request, 'unwanted_param');
        }

        if ($request->has('second_unwanted')) {
            return $this->removeFromQueryAndRedirect($request, 'second_unwanted');
        }

        return $next($request);
    }

    /**
     * Remove and make redirection.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  string                    $parameter
     * @return mixed
     */
    public function removeFromQueryAndRedirect($request, string $parameter)
    {
        $request->query->remove($parameter);
        return redirect()->to($request->fullUrlWithQuery([]));
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,我在handle方法上有更复杂的条件,在现实中。

在不接触内核文件的情况下在控制器构造函数中使用:

$this->middleware(ClearFromAttributes::class)->only('index');
Run Code Online (Sandbox Code Playgroud)

这是一个不错的选择,适合单次使用。


Ara*_*esi 5

拉拉维尔 7

您可以通过将 null 传递给函数来从 url 中删除参数,fullUrlWithQuery如下所示:

request()->fullUrlWithQuery(['token ' => null])
Run Code Online (Sandbox Code Playgroud)