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の4つのドキュメントから

検証が失敗した場合、withErrorsメソッドを使用してValidatorインスタンスをリダイレクトに渡すことに注意してください。このメソッドは、エラーメッセージをセッションにフラッシュして、次のリクエストで使用できるようにします。

変数$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コンポーネントを使用しましたが、混乱しないでください。必要なのは、中括弧と魔法の@記号の付いた行だけです。

laraveldocsからエラーメッセージとビュー

したがって、$ 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 に答える