【问题标题】:Unable to access validation errors in view无法访问视图中的验证错误
【发布时间】:2013-01-04 11:38:54
【问题描述】:

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

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

【问题讨论】:

  • Laravel 4 仍处于测试阶段 - 所以我建议你前往 www.Laravel.io

标签: php validation laravel-4 blade


【解决方案1】:

你试过了吗:

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

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

【讨论】:

    【解决方案2】:

    试试下面的

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

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

    foreach($errors as $error) {
        print $error;
    }
    

    【讨论】:

      【解决方案3】:

      我已经使用->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
      

      【讨论】:

        【解决方案4】:

        来自laravel four documentation

        请注意,当验证失败时,我们将 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">&times;</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
        

        【讨论】:

        • @FMaz008 为什么你认为这不是blade 语法?
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-14
          • 1970-01-01
          • 1970-01-01
          • 2016-01-18
          • 2016-02-06
          • 2021-08-13
          • 1970-01-01
          相关资源
          最近更新 更多