假设您在控制器中有一种方法,比如存储一家新公司。也可以想象一下,我们可以在我们网站的不同页面上创建新公司。例如,我可以创建一个2-3页的公司。
根据我在哪里创建的公司,我需要有不同的重定向。有时我需要重定向回去,有时我要转到其他路线。
类似于:
if ($previousRoute === 'companies.index') {
return redirect()->back();
} else {
return redirect()->route('someroute');
}我想我不知道用户从哪里来的路线名称。如果我检查referrer,那么如果我更改了路由url,那么所有的内容都会被破坏,所以我想要依赖于路由名称。另外,有许多"if-s“或”开关“的解决方案有点奇怪,它会污染代码。
此外,还需要通配符支持。某种重定向的路线图或者类似的东西。
有什么建议如何实施吗?
发布于 2015-11-24 14:52:46
嗯,你可以把以前的网址和任何路线的网址进行比较。这不是最好的解决方案,我不知道如何处理路由参数,但它可以工作。
if (URL::previous() === URL::route('companies.index')) {
return redirect()->back();
} else {
return redirect()->route('someroute');
}发布于 2015-11-24 14:52:19
一组if语句(或switch)在某个地方是必要的,因为您必须做出决定。
我不会依赖参考URL,因为它将打破如果你改变你的路线。和你一样,我更喜欢所有的路线名称,因为我的URL可以改变。
会话密钥怎么样?设置一些值,然后检索它&在公司创建后选择您的重定向。就像这样:
在创建公司页面#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) {
...
}它不漂亮,但它会起作用的。此外,它还有一个很大的优势:您可以任意设置会话值,因此,如果需要添加用于决策的其他信息,请继续。你需要通配符吗?设置会话键,但是要传递该信息。
发布于 2015-11-24 18:17:48
在保存Company之后,如果路由后面有任何“逻辑”,我就无法理解。在我的一个应用程序中,我需要能够编辑一个地址并将其重定向到以前的URL或返回到索引页面。
如果在您的应用程序中是这样的,那么对此有一个相当简单和干净的解决方案。
我们正在执行拉力维尔redirect()->intented()功能。
在您的GET函数(例如getCreate)中,如果目标URL与URL本身不相同,则将其设置为前面的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)中,您只需返回一个重定向到预期的URL,如下所示:
return redirect()->intended('AddressController@getIndex');
// The string within intended() defines where you want to be redirected if there is no session key is foundhttps://stackoverflow.com/questions/33896355
复制相似问题