根据Laravel

时间:2015-11-24 14:34:49

标签: php laravel redirect routing laravel-5

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

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

类似的东西:

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

我想我无法获得用户来自的路线名称。如果我检查引用网址,那么万一我改变路由网址,一切都会被破坏,所以我想依赖路由名称。此外,该解决方案有很多" if-s"或者"开关"有点奇怪,它会污染代码。

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

有任何建议如何实现这个?

3 个答案:

答案 0 :(得分:0)

一些if语句(或switch)必须某处,因为您必须做出决定。

我不会依赖引荐来源网址,因为如果您更改路线,它会中断。和你一样,我更喜欢路由名称,因为我的网址可以更改。

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

在创建公司页面#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) {
    ...
}

它并不漂亮,但它会起作用。此外,它还有一个很大的优势:您可以根据需要创建会话值,因此如果您需要添加其他信息以进行决策,请继续。你需要通配符吗?设置会话密钥,但是您希望传递该信息。

答案 1 :(得分:0)

好吧,您可以将之前的网址与任何路线的网址进行比较。这不是最好的解决方案,我不知道如何处理路由参数,但它可以工作。

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

答案 2 :(得分:0)

如果在保存Company后路由后面有任何“逻辑”,我无法解决。在我的一个应用程序中,我需要能够编辑地址并重定向回到之前的URL或返回索引页面。

如果在你的应用程序中就是这种情况,那么就有一个相当简单和干净的解决方案。

我们正在研究Laravel redirect()->intented()函数。

GET函数(例如getCreate)中,如果与网址本身不同,我们会将有意的网址设置为以前的网址:

($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 redirect()->intended('AddressController@getIndex');
// The string within intended() defines where you want to be redirected if there is no session key is found