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

时间:2018-04-20 22:36:44

标签: php laravel laravel-5 string-comparison

似乎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()进行比较确实有效。 虽然我仍然很好奇为什么第一种方法不起作用。

2 个答案:

答案 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() 进行比较确实有效。虽然我仍然很好奇为什么第一种方法不起作用。