根据 Laravel 中的上一页重定向到不同的页面

Redirect to different pages based on previous page in Laravel

假设您在控制器中有一个方法,例如存储一家新公司。 还想象一下我们可以从我们网站的不同页面创建新公司。例如,我可以从 2-3 页创建公司。

根据我创建公司的位置,我需要不同的重定向。有时我需要重定向回来,有时需要重定向到其他路由。

类似于:

if ($previousRoute === 'companies.index') { 
    return redirect()->back();
} else {
    return redirect()->route('someroute');
}

我想我无法获取用户来自的路由名称。如果我检查 referrer url 那么如果我更改路由 URL 一切都会被破坏所以我想依赖路由名称。另外,有很多 "if-s" 或 "switch" 的解决方案有点奇怪,它会污染代码。

还需要通配符支持。 某种带有重定向或类似内容的路线图。

有什么关于如何实施的建议吗?

一组 if 语句(或 switch)将是必要的某处,因为你必须做出决定。

我不会依赖推荐人 URL,因为如果您更改路线,它就会中断。和你一样,我更喜欢所有的路由名称,因为我的 URLs 可以改变。

会话密钥怎么样?设置一些值,然后检索它并在创建公司后选择您的重定向。像这样:

在创建公司页面 #1 的控制器方法中

Session::put('create-company-method', 1);

然后,创建公司后

$flag = Session::get('create-company-method');
if ($flag===1) {
    return redirect()->route('go-here-next');
} else if ($flag===2) {
    ...
}

它不是很漂亮,但它可以解决问题。此外,它还有一个很大的优势:您可以根据需要设置会话值,因此如果您需要添加其他信息来做出决定,请继续。你需要通配符?设置会话密钥,但是你喜欢传递该信息。

嗯,你可以比较之前的url和任何路线的url。这不是最好的解决方案,我不知道如何处理路由参数,但它可以工作。

if (URL::previous() === URL::route('companies.index')) { 
   return redirect()->back();
} else {
   return redirect()->route('someroute');
}

我无法理解你在保存Company后是否有任何"logic"在路由后面。在我的一个应用程序中,我需要能够编辑地址并重定向回之前的 URL 或返回索引页面。

如果您的应用程序属于这种情况,那么有一个相当简单明了的解决方案。

我们正在提升 Laravel redirect()->intented() 功能。

在您的 GET 函数(例如 getCreate)中,如果它与 URL 本身:

($request->fullUrl() != URL::previous()) ? session()->set('url.intended', URL::previous()) : null;
// url.intended is the same key that is used be Laravels intented function

现在,在您的 POST 方法(例如 postCreate)中,您可以 return 重定向到预期的 URL,如下所示:

return redirect()->intended('AddressController@getIndex');
// The string within intended() defines where you want to be redirected if there is no session key is found