我的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 redirect('/{$wedding->id}/rsvp')
->with(compact('wedding'))
->with(compact('user'))
->with('success', $message);
但是,这似乎没有传递变量(例如“成功”消息).另外,这取决于我每次都使用所有URL参数手动键入URL,而仅告诉它使用哪个视图似乎更简洁.
更新:为响应МаксимСтепанов,我使用以下内容更新了路线:
Route::get('rsvp', 'Guest\MenuController@index')->name('rsvp');
哪个有效(感谢您这样做),但是,我现在这样重定向:
return redirect()
->route('rsvp', ['wedding' => $wedding])
->with('success', $message);
虽然重定向确实有效,但成功消息似乎无效,该消息是通过以下方式捕获的:
@if (isset($success))
{{$success}}
@endif
我已经搜索了有关为什么“-> with(…”中的项不能通过重定向进行操作的指南,但是找不到任何有此问题的人-我假设它与某些问题有关我在干嘛,我不知道该怎么办.
解决方法:
只需将route帮助程序与redirect帮助程序一起使用,即可指定要转到的路线名称:
return redirect()->route('your.route.name')->with([...]);
注意:这要求您命名路线,例如
Route::get('/test', 'SomeController@index')->name('your.route.name');
或者您可以直接传递URL进行重定向.
单独调用视图时,尽管它加载了实际视图,但由于该控制器绑定到请求而非实际视图,因此不会触发相应的控制器.
with帮助程序会创建一个Flash会话项,因此,您需要在刀片中通过session帮助程序而不是直接变量来访问它:
@if (session('success'))
{{ session('success') }}
@endif
标签:laravel,php
来源: https://codeday.me/bug/20191211/2105374.html