2 回答
TA贡献1805条经验 获得超9个赞
据我了解,问题在于,在第一次 POST 之后,您登陆了一个验证可能失败的新页面,如果失败,它会重定向回自身(重新加载)——这将失败,因为第一步中的 POSTed 数据现在失踪了。
这是一个常见的场景,标准的解决方案是使用PRG - Post/Redirect/Get。这意味着,在成功处理一个P OST,你的代码- [R edirects(与摹ET请求)到一个新的页面,而不是仅仅返回该页面的内容。这样,如果用户在新页面上点击重新加载 - 或者如果该新页面上的验证失败 - 它只会重新加载(使用 GET)该新页面,而无需重新提交 POST。
在您的情况下,这看起来像(我使用了简化的 URI 来保持简单,并且我可能混淆了您的控制器方法):
// GET the first page where user enters input
Route::get('/first-page-form', 'TicketController@showFirstPage');
// Handle that data being POSTed
Route::post('/first-page-processing', 'TicketController@store')->name('validation');
现在您的TicketController@store方法进行了验证,并假设一切都通过了,不只是返回一个视图,而是:
public function store(...) {
// Validation code ...
//
// Assuming validation OK, save POSTed data to DB, or maybe
// to session ...
//
// All done - redirect to a new page with a GET.
return redirect('/next-page-form');
}
你需要一个 GET 路由来处理:
// GET the next page where user enters input
Route::get('/next-page-form', 'TicketController@showNextPage');
// And handle the next data being POSTed
Route::post('/next-page-processing', 'DatenTicketController@store');
如果验证失败,它将简单地使用 GET 重定向回/next-page-form.
TA贡献1852条经验 获得超1个赞
您可以使用 laravel 验证类通过验证处理验证响应来简单地做到这一点。您可以按照以下代码进行操作。
$validator = \Validator::make($request->all(), [
'validation1' => 'required',
'validation2' => 'required',
'validation3' => 'required',
]);
if ($validator->fails())
{
redirect()->route('your route')->with('error',$validator->errors()->all());
// or you can return response json for your some ajax or api calls
return response()->json(['errors'=>$validator->errors()->all()]);
}
//do whatever on validation passes
// store data to database
return response()->json(['success'=>'Record is successfully added']);
你可以从这里的官方文档中阅读关于它的手动创建验证器
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报