【发布时间】:2019-12-12 17:56:38
【问题描述】:
我有一个两步验证表单,这意味着第一个用户输入得到验证(在 ValidateTicketData-Controller 中),如果一切正确,您将进入下一个表单页面,我通过
Route::post('/{locale?}/ticket/{cat?}', 'TicketController@store')->name('validation');
问题:在第二页上,用户需要上传文件,否则验证失败。
如果是这种情况,验证器类会立即重定向,这不起作用,因为它是一个后路由。
所以我创建了一个这样的获取路线:
Route::get('/{locale?}/ticket/{cat?}', 'TicketController@store')->name('validation');
并将其放入store-方法中:
$ticketData = $request->validated();
if ($request->isMethod('get')) {
$error = 'No pdf-file has been attached.';
return view ('/validation', compact('ticketData', 'cat', 'error'));
}
我将其放入store-方法中,因为如果用户不在第二页上附加文件,这就是用户被重定向的地方。
但是,如果我现在尝试在不附加文件的情况下发送表单,我会收到 I've redirected too many times 的消息。
我找不到如何使用来自第一页的验证输入重定向到“验证”页面的解决方案(因为它会再次显示),因为验证类会自动执行此操作。
编辑
我将获取路线更改为:
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);
}
这似乎有时不会让我重定向,我不太明白
【问题讨论】:
-
store 方法用于处理表单数据并进行相应的重定向。因此,您验证失败并要处理表单,验证失败等等......
-
@ggdx 你知道如何预防/解决这个问题吗?
-
是的。使用更合适的路线。
标签: php laravel redirect post routes