如何比较 Laravel 的 url()->previous() 与 url()->current()

How to compare Laravel's url()->previous() with url()->current()

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...

您可以通过检查当前 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());

我发现 Illuminate\Routing\UrlGenerator 中的 previous() 使用了 getPreviousUrlFromSession(),其中 returns 结果是:session()->previousUrl().

比较 session()->previousUrl()url()->current() 确实有效。虽然我仍然很好奇为什么第一种方法不起作用。