如何在 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 或表单