我有一个两步验证表单,这意味着第一个用户输入得到验证(在ValidatecKetData控制器中),如果一切正常,您可以进入下一个表单页面,我可以通过
Route::post('/{locale?}/ticket/{cat?}', 'TicketController@store')->name('validation');
问题:在第二页,用户需要上传一个文件,如果他不这样做,验证失败。
如果是这种情况,验证器类立即重定向,因为它是后路由,所以不起作用。
所以我创建了一个这样的获取路线:
Route::get('/{locale?}/ticket/{cat?}', 'TicketController@store')->name('validation');
并将其放入存储
-方法:
$ticketData = $request->validated();
if ($request->isMethod('get')) {
$error = 'No pdf-file has been attached.';
return view ('/validation', compact('ticketData', 'cat', 'error'));
}
我把它放到了store
-method中,因为如果用户不在第二页附加文件,就会在这里重定向。
但是,如果我现在尝试发送表单而不附加文件,我会收到一条消息,我重定向了太多次
。
我找不到一个解决方案,如何重定向到验证页面与验证输入从第一页(因为它会再次显示),因为验证类自动这样做。
编辑
我将获取路径更改为:
Route::get('/{locale?}/ticket/{cat?}', function() {
$error = 'no pdf tho.';
return view('/validation', compact('error'));
});
并在视图中显示$error(如果它不是空的)。这很有效,但我仍然不知道如何从第一页获取输入数据。
我还为$locale
public function handle($request, Closure $next)
{
$locale = $request->segment(1);
app()->setLocale($locale);
return $next($request);
}
它似乎不允许我改变方向,我真的不明白
通过对处理验证响应进行验证,您可以简单地对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']);
您可以从官方文档中阅读它,从这里手动创建验证器
据我所知,问题在于,在第一次发布后,您会进入一个新页面,验证可能会失败,如果验证失败,它会重定向回自身(重新加载)-这将失败,因为第一步发布的数据现在已丢失。
这是一个常见的场景,标准的解决方案是使用PRG-Post/重定向/获取。这意味着在成功处理POST后,代码将重定向(带有GET请求)到新页面,而不仅仅是返回该页面的内容。这样,如果用户在新页面上点击重新加载,或者新页面上的验证失败,它只是重新加载(使用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');
如果验证失败,它只需使用返回/下一页表单
重定向即可。
我和拉威尔3一起工作。我有一个动作按钮,将打开一个弹出模式。 我有一个设备列表。第一页,弹出模式在那里。但对于第二页,弹出模式不出来,但它重定向回第一页。 index.blade.php代码: {{HTML::link(“设备#openProfile”,“强制配置文件”,数组(“id”)= JS: 函数openImposeProfile(id){ document.getElementById("
我在Laravel框架中的HomeController.php中有一段代码,但是我无法访问它重定向到登录页面的索引/主页。我犯了什么大错?
我在Laravel5.2中使用了php artisan函数。 我想重定向的客人登录页面,若客人点击链接,只有用户并没有客人。 我想在登录后将用户重定向到后面的页面。 我怎么能这么做?请详细展示一些文件名示例。 ///////编辑 路线 控制器 Kernel.php
我想在成功登录后为特定页面重定向用户。 我不希望用户在登录后导航到上次查看的页面。 我试过以下网址,但它显示我的错误。 错误:
我有多条带有评论的路线,当我单击“回复”时,我会被重定向到一条路线,在那里我可以发布对评论的回复。我如何正确地存储来自我所在地的路线,然后在发布回复后重定向回该路线? 我考虑将URL::previous作为参数传递,并将其存储到隐藏的输入中,但如果用户刷新页面,它将变为空。另一种方法可能是存储在会话中,但我不知道如何可靠地使其过期。。。
我在laravel中遇到了一个用户登录的问题,我可以正确地登录用户,但是问题是,在用户登录后,他被重定向到login POST方法,而不是home,我已经将