似乎Laravel的url()->previous()
和url()->current()
被打破了。
我无法执行if previous == current
,因为previous
输出带有http:/ https:并以/
结束,current
输出没有此内容。
我认为这不会成为问题。我可以将http:
/ https:
添加到url()->current()
并继续我的生活,但显然不会那么简单。
问题: $ url_1!= $ url_2
代码:
$url_1 = url()->previous();
$url_2 = url()->current();
var_dump( $url_1 );
var_dump( $url_2 );
输出:
string(22) "http://localhost:3000/"
string(21) "//localhost:3000"
尝试修复:
代码:
$url_1 = url()->previous();
$url_2 = 'http:' . url()->current() . '/';
var_dump( $url_1 );
var_dump( $url_2 );
输出:
string(22) "http://localhost:3000/"
string(27) "http://localhost:3000/"
所以$url_1
仍然不等于$url_2
。有谁知道这里发生了什么?在我看来,http:
被视为单个角色。
我如何才能真正比较两者,因为现在,$url_1
永远不会等于$url_2
......
更新
我在Illuminate \ Routing \ UrlGenerator中找到了previous()
使用getPreviousUrlFromSession()
返回结果:session()->previousUrl()
。
将session()->previousUrl()
与url()->current()
进行比较确实有效。
虽然我仍然很好奇为什么第一种方法不起作用。
答案 0 :(得分:0)
您可以通过检查当前 url 和前一个 url 来捕获重定向循环。
$redirect = app('redirect');
if (request()->fullUrl() != $redirect->back()->getTargetUrl()){
$response = $redirect->back();
} else {
$response = $redirect->to('/');
}
return $response
->withInput($request->except($this->dontFlash))
->withErrors('That page could not be found. Please try again or report the broken link: ' . $request->getRequestUri());
答案 1 :(得分:0)
我发现 previous()
中的 Illuminate\Routing\UrlGenerator
使用 getPreviousUrlFromSession()
返回结果:session()->previousUrl()
。
将 session()->previousUrl()
与 url()->current()
进行比较确实有效。虽然我仍然很好奇为什么第一种方法不起作用。