6

我已经设置了一个带有一些验证的控制器。

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数组总是空的。

4

5 回答 5

8

来自laravel 四个文档

请注意,当验证失败时,我们使用该withErrors方法将 Validator 实例传递给 Redirect。此方法会将错误消息闪烁到会话,以便它们在下一个请求时可用。

变量$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">&times;</button>
    <ul>
        <li id="form-errors" >
            <h3> {{ $errors->first('email') }}</h3>
        </li>
    </ul>
</div>
@endif

我已经使用了一些bootstrap组件,不要混淆,您唯一需要的是带有花括号和神奇@符号的线条。

来自laravel 文档错误消息和视图

因此,重要的是要注意 $errors 变量将始终在您的所有视图中可用,在每个请求中,允许您方便地假设 $errors 变量始终已定义并且可以安全使用。

你也可以检查这个

@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
于 2013-07-09T15:35:35.387 回答
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
于 2013-03-16T04:55:04.950 回答
0

你有没有尝试过:

return Redirect::to('login')->withErrors($validator);

或者

return Redirect::to('login')->withErrors($validator->messages());
于 2013-01-21T13:22:45.823 回答
0

当您难以显示错误并且它们通过正确传递时,这是另一种可能性->withErrors()。如果您重定向到必须执行任何类型的自身状态检查和自身调用的控制器操作,->withErrors()它将隐藏第$errors一个注入的操作。

于 2013-11-08T10:40:44.050 回答
-1

尝试以下

return Redirect::to('login')->with('errors',$validator->errors->all());

然后从您的视图中遍历此错误

foreach($errors as $error) {
    print $error;
}
于 2013-01-22T14:39:51.230 回答