ホームページ  >  記事  >  PHPフレームワーク  >  laravelに新しく追加されたものとそれを編集できないことの何が問題なのでしょうか?

laravelに新しく追加されたものとそれを編集できないことの何が問題なのでしょうか?

PHPz
PHPzオリジナル
2023-04-23 10:06:26549ブラウズ

最近、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');
}
この方法を使用すると、フォームに _method パラメーターを追加するだけで済みます。これにより、読みやすくなり、必要なコード作業が少なくなります。

Laravel プロジェクトの開発プロセスでは、問題に遭遇することは避けられず、問題を解決するには、忍耐と注意力、そしてフレームワークとテクノロジーの深い理解と習得が必要です。この記事が読者の皆様の参考になれば幸いです。

以上がlaravelに新しく追加されたものとそれを編集できないことの何が問題なのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。