我的 Web 应用程序中有很多表单。但是,我注意到,一旦我完成了一篇文章并将用户转发到新页面,URL 仍然是更新的 URL。因此,当用户刷新页面时,它会重新提交请求。
以下是我处理转发的方式。
public function update(Request $request, Wedding $wedding, User $user)
{
$user->attending = ($request->attending != null);
$user->save();
$message = "Sorry to hear you won't make it!";
if ($user->attending) {
$message = 'Welcome to the party pal!';
}
return view('pages.guest.rsvp')
->with(compact('wedding'))
->with(compact('user'))
->with('success', $message);
}
因此,一旦执行了“return view...”,用户将转到给定的 View ,这很好,但它允许他们刷新页面并重新提交相同的帖子。
我使用以下代码作为替代测试。
return redirect('/{$wedding->id}/rsvp')
->with(compact('wedding'))
->with(compact('user'))
->with('success', $message);
但是,这似乎并没有通过变量传递(例如“成功”消息)。此外,这依赖于我每次手动输入 URL 以及所有 URL 参数,而只是告诉它使用哪个 View 似乎更清晰。
更新:作为对 Максим Степанов 的回应,我更新了我的路线:
Route::get('rsvp', 'Guest\MenuController@index')->name('rsvp');
这确实有效(谢谢你),但是,我现在像这样重定向:
return redirect()
->route('rsvp', ['wedding' => $wedding])
->with('success', $message);
虽然重定向确实起作用,但成功消息似乎不起作用,消息是通过以下方式捕获的:
@if (isset($success))
<div class="alert alert-success">
{{$success}}
</div>
@endif
我已经搜索了关于为什么“->with(...”中的项目没有通过重定向的指导,但我找不到任何人遇到这个问题 - 我假设它与某些东西有关我在做。我只是想不通是什么。
最佳答案
只需使用 route
redirect
的助手助手指定你想去的路线名称:
return redirect()->route('your.route.name')->with([...]);
注意:这需要您为路线命名,例如
Route::get('/test', 'SomeController@index')->name('your.route.name');
或者您可以将 URL 直接传递给 redirect
。
当你自己调用view
时,虽然它加载了实际的view
,但是相应的 Controller 并没有被触发,因为 Controller 是绑定(bind)到请求的,而不是实际的查看。
with
帮助程序创建一个 Flash session 项,因此,您需要在 Blade 中通过 session
访问它助手而不是直接变量:
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
关于php - 更新后如何正确转发到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55464585/