最近、Laravel フレームワークを使用してプロジェクトを開発しているときに、新しく追加したデータが編集できないという問題を発見しました。さらにトラブルシューティングと分析を行った後、問題を見つけて解決しました。以下に解決策のアイデアをいくつか紹介します。
まず最初に、HTTP リクエスト メソッドという概念を明確にする必要があります。 HTTP リクエスト メソッドとは、クライアントがサーバーにリソースをリクエストするときに使用するメソッド (GET、POST、PUT、DELETE など) を指します。このうち、GET メソッドはリソースの取得に使用され、POST メソッドはリソースの作成に使用され、PUT メソッドはリソースの更新に使用され、DELETE メソッドはリソースの削除に使用されます。
Laravel では、フォーム送信を使用する場合、デフォルトのリクエスト メソッドは POST です。例:
<form action="/user" method="POST"> <input type="text" name="name"> <button type="submit">提交</button> </form>
その後、コントローラーの store
メソッドを使用してこれを処理します。 request :
public function store(Request $request) { $user = new User; $user->name = $request->input('name'); $user->save(); return redirect('/user'); }
上記のコードでは、新しい User オブジェクトを作成し、フォームによって送信された name フィールドを User オブジェクトの name 属性に割り当て、データを保存して / にリダイレクトします。 user
ページ。
ただし、上記のコードには、新しく追加されたデータを編集できないという問題が発生することがあります。編集ページにアクセスすると、ページ内には元々作成したデータの情報がありません。どうしてこれなの?まず編集ページのコードを見てみましょう:
<form action="/user/{{ $user->id }}" method="POST"> {{ method_field('PUT') }} <input type="text" name="name" value="{{ $user->name }}"> <button type="submit">提交</button> </form>
このコードでは、method_field
メソッドを使用してリクエスト メソッドを PUT として指定します。これは、HTTP プロトコルではリソースを更新するためです。 PUTメソッドが必要です。ただし、Laravel フレームワークではデフォルトの POST リクエストが PUT リクエストを認識できないため、編集ページにアクセスすると、Laravel は期待する PUT リクエストではなくデフォルトの POST リクエストに従って処理します。
この問題を解決するには 2 つのアイデアがあります: 1 つは PUT リクエスト メソッドを使用してデータを作成すること、もう 1 つは _method
パラメーターを使用して POST を使用するときにリクエスト メソッドを指定することです。データを作成する方法。
最初の解決策はより単純な方法ですが、より多くのコード変更が必要です。次の形式で PUT リクエスト メソッドを使用する必要があります:
<form action="/user/{{ $user->id }}" method="POST"> {{ method_field('PUT') }} <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="text" name="name" value="{{ $user->name }}"> <button type="submit">提交</button> </form>
次に、コントローラで PUT リクエストを処理します:
public function update(Request $request, $id) { $user = User::findOrFail($id); $user->name = $request->input('name'); $user->save(); return redirect('/user'); }
このメソッドを使用して、次の形式で PUT メソッドを指定する必要がありますCSRF 攻撃を防ぐには、_token パラメーターを渡す必要があります。これにより、コードのワークロードが大幅に増加します。
2 番目の解決策ははるかに簡単です。フォームで POST メソッドを使用する必要がありますが、送信時に _method パラメーターを追加して、リクエスト メソッドを PUT として指定します。
<form action="/user/{{ $user->id }}" method="POST"> <input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="text" name="name" value="{{ $user->name }}"> <button type="submit">提交</button> </form>
その後、コントローラーで POST リクエストを処理するときに、method# を使用します。 ## PUT リクエストを識別する方法:
public function update(Request $request, $id) { $user = User::findOrFail($id); $user->name = $request->input('name'); $user->save(); return redirect('/user'); }
以上がlaravelに新しく追加されたものとそれを編集できないことの何が問題なのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。