如何在 Laravel 中将验证错误传递给查看而不重定向

Posted

技术标签:

【中文标题】如何在 Laravel 中将验证错误传递给查看而不重定向【英文标题】:How to pass validation errors to view without redirect in Laravel 【发布时间】:2013-12-19 23:50:37 【问题描述】:

如何在 Laravel 中将验证错误直接传递给视图而无需重定向? 我不想那样做:

return Redirect::back()->withErrors($validator)->withInput();

而是:

Input::flash(); // for repopulating fields
Validator::flash(); // this doesn't exist    
return View::make('fragments/login_ajax');

或者另一个更简洁的直接生成视图而无需重定向。 Optimal 是这样的,但这不起作用:

return View::make('fragments/login_ajax')->withErrors($validator)->withInput();

原因是,这是基于 ajax 登录的答案。重定向到仅用于显示相同视图的另一种方法被认为是不必要的。

干杯

【问题讨论】:

【参考方案1】:

真正的答案: 这不是一个值得花时间研究的问题。这是一个架构问题。

针对您的情况的可能解决方案(不推荐): 使 auth 成为一条新路由并让它返回错误/消息的 json。然后让 JS 处理错误/消息/逻辑。

【讨论】:

好的,谢谢,让我们进行架构更改。我用这种方法得到了一个可行的解决方案:post 方法只处理逻辑,然后它重定向(带有错误和输入)到 get 方法,它也创建了非 ajax 登录表单。这个 get 方法检查 Request::ajax() 并决定是返回完整的登录表单还是只返回 ajax sn-p。您认为这是更好的方法吗?【参考方案2】:

虽然同意这样做是个坏主意,但您可以使用View::share() 将错误分享给所有视图。

\View::share('errors', $errors);

【讨论】:

【参考方案3】:

使用以下解决方案。

控制器:

$validator = Validator::make($request->all(), 
                             [
                                'class_id' => 'required|numeric|not_in:0',
                                'batch_id' => 'required|numeric|not_in:0',
                                'student_id' => 'required|numeric|not_in:0'
                             ]);
$this->viewData['errors'] = $validator->errors();

查看文件:

!! Form::label('class_id','Student Class') !!
!! Form::select('class_id', array(), 0, ['class' => 'form-control', 'id' => 
'class_id']) !!!! $errors->first('class_id', '<p class="help-block">:message</p>')!!

【讨论】:

以上是关于如何在 Laravel 中将验证错误传递给查看而不重定向的主要内容,如果未能解决你的问题,请参考以下文章

将模型状态错误传递给不同的操作方法

如何在 Laravel 8.x 中将附加参数传递给验证器-> 后函数?

如何在 Laravel 中将变量从视图传递到控制器而不使用 URL 或表单

无论控制器如何,如何在 Laravel 中将数据传递给布局?

Laravel 路由模型绑定 - Laravel 5.7

在 Laravel 4 中将数据传递给闭包