web-dev-qa-db-ja.com

Laravel 5.1のカスタムリクエストオブジェクトを介して検証した後、入力フィールドの値を復元できますか?

簡単な連絡フォームがあるとしましょう。

<form action="/message" method="post">
    {!! csrf_field() !!}
    <div class="form-group">
        <label>Name: </label>
        <input type="text" name="name" class="form-control">
    </div>

    <div class="form-group">
        <label>Email: </label>
        <input type="email" name="email" class="form-control">
    </div>

    <div class="form-group">
        <label>Your Message: </label>
        <textarea name="message" class="form-control"></textarea>
    </div>

    <div class="form-group">
        <button class="btn btn-primary">Submit Message</button>
    </div>
</form>

これがそのリクエストを処理する私のコントローラーです:

public function sendMessage(ContactRequest $request)
{
    dd($request->all());
}

ContactRequestオブジェクトを挿入しているので、検証は完全に機能していることに注意してください。

問題

お問い合わせフォームの古い入力値を復元するにはどうすればよいですか?そのため、ユーザーはすべてのフィールドに入力する必要がありません。

13
Homo Sapien

ContactRequestの検証が失敗した場合、エラーと古い入力を含むフォームにリダイレクトされます。

したがって、ブレードファイルで{{old( 'field')}}を使用するだけです。

コードの例:

<form action="/message" method="post">
{!! csrf_field() !!}
<div class="form-group">
    <label>Name: </label>
    <input type="text" name="name" value="{{ old('name') }}" class="form-control">
</div>

<div class="form-group">
    <label>Email: </label>
    <input type="email" name="email" value="{{ old('email') }}"  class="form-control">
</div>

<div class="form-group">
    <label>Your Message: </label>
    <textarea name="message" class="form-control">{{ old('message') }}"</textarea>
</div>

<div class="form-group">
    <button class="btn btn-primary">Submit Message</button>
</div>
20
igs013

「古い入力」方式を使用できます。

$request->flash(); //to put the posted data to session

そして

$username = $request->old('username'); //to get the values you previously stored

フォームへのリダイレクト8backを実行している場合は、次のようにフラッシュできます。

return redirect('form')->withInput();

この方法でブレードテンプレートの古い値を取得するのはさらに簡単です。

{{ old('username') }}

「古い入力」方法の詳細については、こちらをご覧ください ここ

5
MaGnetas