Laravel中如何检测是否存在任意GET参数?
嘿,这个问题我碰到过,很容易解决!你用Request::get()报错是因为这个方法必须传入参数名(比如Request::get('sort')),不传参数就会触发「参数不足」的错误。要覆盖所有已知/未知的GET参数,我们需要检查请求的查询字符串是否存在,而不是单个参数。
下面给你几种靠谱的解决方案,都是Laravel里推荐的写法:
方案1:用request()辅助函数(最简洁)
直接在Blade模板的头部区域添加这段代码就行,不用额外引入门面:
@if(request()->query()) <link rel="canonical" href="{{ url($page->slug) }}" /> @endif
request()->query()会返回所有GET参数的数组,如果URL后没有参数,数组为空,判断条件不成立;只要有任意参数(不管是已知的?sort=price还是未知的?random=xxx),数组就非空,就会插入规范链接。
方案2:检查查询字符串本身
如果你想更直接判断URL是否带?后面的内容,可以用getQueryString()方法:
@if(request()->getQueryString()) <link rel="canonical" href="{{ url($page->slug) }}" /> @endif
这个方法会返回URL中?之后的字符串(比如sort=price&page=2),如果没有参数就返回null,判断逻辑同样生效。
方案3:使用Request门面(如果你习惯用门面)
如果你更倾向于用门面写法,记得要正确调用查询方法:
@if(\Illuminate\Support\Facades\Request::query()) <link rel="canonical" href="{{ url($page->slug) }}" /> @endif
另外提醒一下:url($page->slug)会生成绝对URL(比如https://yourdomain.com/product),完全符合canonical链接的标准要求,不用担心路径问题。
内容的提问来源于stack exchange,提问作者Dev.W
相关产品推荐
相关产品推荐

