私はLaravel 5を学んでいます。データベースから既存のレコードを編集するためのシンプルなフォームを作成しようとしていますが、ここではwithInput()
とold()
の使い方が混乱しています。検討し、ここで、次のユーザフローLaravel 5:リダイレクトを使用する方法() - >事前に設定値が含まれているフォームでwithInput()?
<!-- book.blade.php -->
<form action="{{ route('book.update') }}" method="post">
<label>Book Title:</label>
<input type="text" name="title" value="{{ $title }}">
@if ($errors->has('title'))
<strong>{{ $errors->first('title') }}</strong>
@endif
<button type="submit">Save</button>
{{ csrf_field() }}
</form>
:
ユーザーを
ここ<?php // routes.php use App\Book; Route::get('/book', [ 'as' => 'book.edit', function() { $book = Book::find(1); return view('book', [ 'title' => $book->title ]); } ]); Route::post('/book', [ 'as' => 'book.update', function() { $validator = Validator::make(Request::all(), [ // This validator will (almost) always fail. This is deliberate, to // illustrate the problem I'm describing. 'title' => 'in:zzzzz|required' ]); if ($validator->fails()) { return redirect(route('book.edit')) ->withInput() ->withErrors($validator); } // TODO: save book } ]);
が対応するテンプレートです:
たとえば、次のルートとコントローラを考えますGET/bookをリクエストします(このページはload#1と呼ばれます)。
book.edit
コントローラは、データベースから(「グレイのシェード50」であることを起こる)書籍のタイトルをロードし、ビューを切っその文字列を渡します。ユーザーはフィールドに「50 Shades of Grey」という値が設定されたフォームを表示します。ここまでは順調ですね。 「二都物語」、と言う - -ユーザーは、そのタイトルを変更し、フォームを送信します。
book.update
ルートは、この要求を処理し、それが無効で見つけました。ユーザーはbook.edit
ルートにリダイレクトされます(このページは負荷#2と呼ばれます)。book.edit
再度同じ値をtitle
の値に設定します(これは間違っています)。
これは私が解決しようとしている部分です:どのように私は、ページの読み込み#1上のデータベースからタイトルを表示するが、ページの読み込み#2でのユーザーの入力を再表示することができますか?
は今、私はこのコードはこのように動作理由を理解しています。私はちょうど私がそれをやってするををなってるか理解していません。
可能な解決策(と、なぜ私はそれを好きではない):私のテンプレートで
、私は
value="{{ old('title') }}"
の代わりvalue="{{ $title }}"
を使用することができます。これはページロード#2の問題を解決しますが、title
フィールドはブランクページロード#1になります。ビューにいくつかのロジックを追加することができます:
{{ if $wasRedirected ? old('title') : $title }}
これはちょっとハックして間違っているように見えますが、それはビュー内にあるべきもののようなものではありません。'title' => $wasRedirected ? Request::get('title') : $book->title
のような何らかのロジックをbook.edit
リクエストに追加することができます。これはまた、ハックと間違って感じる。
私は恐らく何かを誤解しているか、明らかに何かを見逃しています。どのようにしてこのフォームを編集するのですか通常はLaravel 5で処理されますか?標準的なパターンがあるはずですよね?
あなたが使用できる便利なメソッドを提供し、一つの共通の解決策は、(https://laravelcollective.com/docs/5.2/html)[Laravelの集団からフォーム&HTMLコンポーネント]をインストールすることであると思われます表示する内容を自動的に把握するビュー。私はそのオプションについていますが、サードパーティ製のアドオンに頼らずに、これをvanilla Laravelで行う方法はありますか? – greenie2600