【问题标题】:Laravel redirecting back to list after submitting create form提交创建表单后,Laravel 重定向回列表
【发布时间】:2014-08-20 04:51:21
【问题描述】:

也许我遗漏了一些东西,但我不知道该怎么做。

我有一个索引视图,其中列出了我的 tiers 表中的所有记录。该页面有一个显示表单的“创建新层”按钮。用户输入新层的数据并点击提交按钮。在我的 TierController 中,我有以下内容:

public function store()
{
//
$data = Input::all();

$tier = new Tier();
$tier->name=$data['name'];
$tier->price = $data['price'];

$tier->save();

return Redirect::back()->with('message',"Tier created successfully.");
}

这将我带回到空的创建表单并显示消息,但用户必须按下后退按钮才能返回到索引视图,该视图在我点击刷新之前不会显示新数据。我想让系统在点击提交按钮并刷新数据后自动返回索引视图。

我知道我可以做一个 Redirect::to('tiers.index')->with('message','Tier created successfully') 但我遇到的问题是浏览器历史看起来像

tier.index -> tier.create -> tier.index

这对于用户来说是非常混乱的,当他们在创建视图显示时确实点击了返回按钮并将他们吓坏了。

有没有办法执行 Redirect::back(或其他操作),不会将 tier.create 视图留在历史记录中并刷新索引数据?

谢谢

【问题讨论】:

    标签: php laravel-4


    【解决方案1】:

    我不认为您可以在不借助 Javascript 或其他工具的情况下操纵用户的浏览历史记录。当然不是单独使用 Laravel。 所以,不要。你多虑了。为什么你这么关心浏览器的历史?为什么要对其进行操作,使其不反映用户实际浏览的页面?这有点违背了拥有历史的目的......

    如果您的应用导航足够直观和熟悉,用户将不会觉得需要使用本机浏览器的后退/前进按钮。不要假设您的用户会犯最基本的浏览错误,除非您有数据支持。

    话虽如此,在这个问题上,约定并没有给你太多选择:通常你要么将用户引导回索引——即Redirect::route('tiers.index')——要么引导到新创建的项目——即Redirect::route('tiers.show', $tier->id)。两者都是完全可以接受的,并且肯定在用户的预期结果之内。

    如果tiers 是用户只能在特定限制内添加的内容(每个用户一个、每个类别一个、每天一次等),那么我会尝试将他重定向到创建页面,阻止他填写一个永远不会通过验证的新表格。否则,请选择上述页面之一并继续您的下一个开发挑战。

    【讨论】:

      猜你喜欢
      • 2013-04-13
      • 1970-01-01
      • 2021-09-17
      • 2013-08-06
      • 2016-12-30
      相关资源
      最近更新 更多