我的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))
<div class="alert alert-success">
{{$success}}
</div>
@endif
我一直在寻找有关“-> with(...”中的项目为何不通过重定向进行操作的指南,但是我找不到任何人遇到此问题-我假设它与某些问题有关我在做,我只是想不通。
答案 0 :(得分:1)
使用with
方法访问要传递的变量时遇到问题的原因是with
方法将数据闪烁到会话中,而不是直接传递到视图中。请参阅以下参考。
https://laravel.com/docs/5.8/redirects#redirecting-with-flashed-session-data
因此,为了访问视图中的变量,您只需从会话数据中提取成功消息
@if (session('success'))
<div class="alert alert-success">
{{ session('success')}}
</div>
@endif
答案 1 :(得分:1)
只需将route
帮助程序与redirect
帮助程序一起使用,即可指定您要转到的路线名称:
return redirect()->route('your.route.name')->with([...]);
注意:这需要您命名路线,例如
Route::get('/test', 'SomeController@index')->name('your.route.name');
或者您可以将URL直接传递到redirect
。
当您自己调用view
时,尽管它会加载实际的view
,但不会触发相应的控制器,因为该控制器绑定到了请求而不是实际的视图上。
with
帮助程序会创建一个Flash会话项,因此,您需要在刀片中通过session
帮助程序而不是直接变量来访问它:
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
答案 2 :(得分:0)
路线:
function(data) {
$.each(data, function(key, value) {
tempData += '<tr>';
tempData += '<td>' + value.name + '</td>';
tempData += '<td>' + value.value + '</td>';
//check whether the key already exists in the map
measurementDataObj[value.name] = measurementDataObj[value.name] || [];
measurementDataObj[value.name].push(value.value);
});
}
控制器:
Route::get('/{$wedding}/rsvp', 'UpdateController@update')->name('wedding');
或
return redirect()->route('wedding', ['id' => $wedding->id])->with('success', $message);