【问题标题】:Laravel Redirect::intended() conditional fallbacksLaravel Redirect::intended() 条件回退
【发布时间】:2024-01-05 21:20:01
【问题描述】:

据我了解,Redirect::intended() 将在登录之前重定向到用户想要的页面,或者回退到可以作为参数传递的 url。

我的问题是:我将如何做到这一点,以便它首先检查会话中是否有预期的 url,如果没有,它会改为 Redirect::back(),如果失败,它将重定向到用户配置文件将与Redirect::route('users.show', Auth::user()->username); 相同

【问题讨论】:

  • 知道Redirect::back() 总是重定向到referer,您定义Redirect::back() 失败以触发下一个Redirect::route(...) 的标准是什么
  • 如果有人直接链接到登录页面,就不会有引荐来源...

标签: php laravel http-redirect laravel-routing


【解决方案1】:
$fallbackUrl = Request::header('referer') ?: URL::route('users.show', Auth::user()->username);

Redirect::intended($fallbackUrl);

【讨论】:

  • 你应该解释你的代码在这里做什么。只包含未注释代码的答案质量低下。
  • 谢谢!幸运的是,我可以很好地理解它;但是,詹姆斯是正确的,您应该解释您的解决方案。我喜欢你的解决方案是多么简单。 :D
【解决方案2】:

注意事项:

  1. 通过将引用者传递给Redirect::intended 作为referer 的参数,部分可以实现您期望的行为。

  2. 其余的取决于您所说的 Redirect::back 失败的标准。

答案:

这是我的看法

// Retrieve the referer - Ripped from Redirect::back()
$back = Redirect::getUrlGenerator()->getRequest()->headers->get('referer');

// your expected Fall back Redirection logic
if (itSucceed($back)) {
    Redirect::intended($back);
} else {
    Redirect::route(...)
}

【讨论】:

  • 谢谢!尽管根据 Marwelln 的回答做了一些更改。使用 Request::header('referer') 而不是您的答案中的长链。
  • 你是对的Request::header('referer')简洁,laravelish并且产生相同的结果。