我已经设置了一个带有一些验证的控制器。
public function attemptLogin()
{
$rules = array(
'email'=>'required|email',
'password'=>'required'
);
$validator = Validator::make(Input::all() , $rules);
if($validator->fails()){
return Redirect::to('login')->withErrors($validator);
};
}
如果我直接在控制器中输出消息
$messages = $validator->messages();
print_R($messages->all());
我收到验证错误 - 但是如果我重定向:
return Redirect::to('login')->withErrors($validator);
视图中可用的$errors
数组始终为空。
答案 0 :(得分:8)
请注意,当验证失败时,我们将Validator实例传递给 使用
withErrors
方法重定向。此方法将闪烁错误 消息到会话,以便它们在下一个可用 请求。
变量$errors
它不是数组。
$errors
变量将是一个实例MessageBag
。
出于某种原因,我不太喜欢@seamlss的想法。
您可以使用此代替。
@if(Session::has('errors'))
<? $errors = Session::get('errors'); ?>
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
<ul>
<li id="form-errors" >
<h3> {{ $errors->first('email') }}</h3>
</li>
</ul>
</div>
@endif
我已经使用了一些bootstrap
组件,不会感到困惑,你唯一需要的就是带有花括号的线条和神奇的@符号。
来自laravel docs error-messages-and-views
因此,重要的是要注意$ errors变量总是如此 在您的所有视图中提供,每次请求,允许您 方便地假设$ errors变量总是被定义并且可以 安全使用。
您还可以查看this
@if( $errors->has('email') )
<div class="control-group error">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input type="text" id="email" placeholder="Email" name="email">
<span class="help-inline">{{ $errors->first('email') }}</span>
</div>
</div>
@endif
答案 1 :(得分:5)
我使用->withErrors($validation)
然后在视图中检查条件@if( $errors->count() > 0 )
...
@if( $errors->count() > 0 )
<p>The following errors have occurred:</p>
<ul id="form-errors">
{{ $errors->first('username', '<li>:message</li>') }}
{{ $errors->first('password', '<li>:message</li>') }}
{{ $errors->first('password_confirmation', '<li>:message</li>') }}
</ul>
@endif
答案 2 :(得分:0)
你试过了吗?
return Redirect::to('login')->withErrors($validator);
或
return Redirect::to('login')->withErrors($validator->messages());
答案 3 :(得分:0)
当您难以显示错误以及通过->withErrors()
正确传递错误时,这是另一种可能性。如果您重定向到必须执行任何类型的状态检查并且自身调用->withErrors()
的控制器操作,它将隐藏首先注入的$errors
。
答案 4 :(得分:-1)
尝试以下
return Redirect::to('login')->with('errors',$validator->errors->all());
然后从你的视图循环中通过这个错误
foreach($errors as $error) {
print $error;
}