在Laravel中验证并重定向到一个post路由

3
能否在Laravel中将用户重定向到POST路由? 我有两个表单。 form-one被发送到包含form-two的路由,而form-two被发送到最终路由,然后进行验证。如果form-two$validator->fails()返回>真值,我想将用户发送回from-two,但这是一个 POST路由
Redirect::to('Form-Two')->withErrors($validator);

我尝试使用这个方法,但它失败了,可能因为它只适用于Get路由。我想到的一件事是将用户重定向到一个Get路由,然后从该Get路由向form-two提交数据,但那听起来很蠢。有没有更简洁的方法来做到这一点?我是新手。
表格二:
Route::post('form-two', array('before' => 'csrf', function()
{
    $formOneData= Input::all();
    $rules = array(...);

    $validator = Validator::make($formOneData, $rules);
    if ($validator->fails()) {
        return Redirect::to('Form-One')->withErrors($validator);
    }
}

最终页面:

Route::post('final', array('before' => 'csrf', function()
{
    $finalData = Input::all();
    $rules = array(...);

    $validator = Validator::make($finalData, $rules);
    if ($validator->fails()) {
        return Redirect::to('Form-Two')->withErrors($validator);
    }
}

“withErrors” 将错误信息存储在会话中。或许你可以尝试利用这一点。 - majidarif
谢谢您的建议,但我仍然需要将用户发送回表单二页面,以便他可以进行必要的更改。从routes.php文件向路由POST数据是否可行? - Chaitanya
1个回答

6
这并不是一个 Laravel 特有的问题,这需要你了解 HTTP 重定向的工作原理。当你向浏览器发送重定向时,你会发送一个带有要重定向的 URL 的 302 重定向。浏览器将重定向并发出 GET 请求到提供的 URL。你可以潜在地将响应代码更改为 307,它要求浏览器使用与最初调用相同的方法进行重定向,并带有一个安全消息 依赖此方法是一个坏主意,因为它在不同的浏览器中实现方式不同。此外,Laravel 需要你构建自己的响应对象和头文件。
为了使你的代码兼容各种浏览器,最好的做法是分离 GET 和 POST 逻辑。这就是为什么从 POST 路由直接返回视图通常是个坏主意。
我认为,如果你想要所需的功能,你真正需要做的是重新设计和重构你的表单。

1
我想你是对的... 我写得有点笨拙。谢谢你的建议。我会尝试重构它。 - Chaitanya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接