根据 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
假设您在控制器中有一个方法,例如存储一家新公司。 还想象一下我们可以从我们网站的不同页面创建新公司。例如,我可以从 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