🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

9108閲覧

routeにてPUT/PATCHを指定しているが「PUT/PATCHはサポートされていない」となる

yuki84web

総合スコア1857

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2019/11/15 11:59

編集2019/11/16 02:32

resouceを利用してルートを設定しています。

php

1Route::resource('users', 'UserController');

この時、ルートは下記のようになります。

php

1+----------------------------------------+---------------------+---------------+------------------------------------------- 2| Method | URI | Name | Action 3+----------------------------------------+---------------------+---------------+------------------------------------------- 4| GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | / | | Illuminate\Routing\RedirectController 5| POST | users | users.store | App\Http\Controllers\UserController@store 6| GET|HEAD | users | users.index | App\Http\Controllers\UserController@index 7| GET|HEAD | users/create | users.create | App\Http\Controllers\UserController@create 8| GET|HEAD | users/{user} | users.show | App\Http\Controllers\UserController@show 9| PUT|PATCH | users/{user} | users.update | App\Http\Controllers\UserController@update 10| GET|HEAD | users/{user}/edit | users.edit | App\Http\Controllers\UserController@edit

UserController.php

php

1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use App\Http\Controllers\Controller; 5use Illuminate\Support\Facades\DB; 6use App\User; 7use App\Http\Requests\UserRequest; 8 9class UserController extends Controller 10{ 11 public function edit(User $user) 12 { 13 //$user = User::findOrFail($id); 14 15 return view( 16 'user.edit', 17 ['user' => $user] 18 ); 19 } 20 21 public function update(UserRequest $request, $id) 22 { 23 $user = User::findOrFail($id); 24 $user->fill($request->all())->save(); 25 return redirect()->route('users.index'); 26 } 27}

views/user/edit.blade.php

php

1<form method="POST" action="{{ route('users.update', ['id' => $user->id ]) }}" id="myform"> 2@if ($errors->any()) 3 <div class="alert alert-danger"> 4 <ul> 5 @foreach( $errors->all() as $error) 6 <li>{{ $error }}</li> 7 @endforeach 8 </ul> 9 </div> 10@endif 11{{ csrf_field() }} 12{{ method_field('PATCH') }} 13() 14</form> 15 16<button class="btn btn-primary save" type="submit" form="myform">保存</button>

UserRequest.php

php

1namespace App\Http\Requests; 2 3use Illuminate\Foundation\Http\FormRequest; 4 5class UserRequest extends FormRequest 6{ 7 public function authorize() 8 { 9 return true; // 認証が必要 10 } 11 12 public function rules() 13 { 14 return [ 15 'name' => 'required|max:255', 16 () 17 ]; 18 } 19 20 public function attributes() 21 { 22 return [ 23 'name' => '名前', 24 () 25 ]; 26 } 27}

この時、編集画面(/users/{user}/edit)から「PATCH」を指定して送信した際、
「The PATCH method is not supported for this route. Supported methods: GET, HEAD, POST. 」
のエラーになってしまいます。
当然「PUT」でも通りませんでした。

ルート名の指定に間違いはありませんので、「更新」とは別のリクエストが送信されているとも思えないのですが…。
URLは"example.com/users?id=1"という形式になっています。

どのような理由が考えられますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/11/15 14:29

タイトル 誤字があります>PTACH
yuki84web

2019/11/15 17:08

修正しました。
m.ts10806

2019/11/15 21:08

細かくて申し訳ないですがまだ残ってます
yuki84web

2019/11/18 02:09

修正しました。
guest

回答1

0

ベストアンサー

「擬似フォームメソッド」の項目を読んでください。
https://readouble.com/laravel/6.x/ja/routing.html

Laravel6.x

イメージ説明

Laravel5.5

イメージ説明

<form method="POST" action="{{ route('users.update', ['id' => $user->id ]) }}" id="myform">

<form method="POST" action="{{ route('users.update', ['user' => $user ]) }}" id="myform">

users/{user} なので、こうする方がいいですね。


public function update(UserRequest $request, $id) { $user = User::findOrFail($id); $user->fill($request->all())->save(); return redirect()->route('users.index'); }

public function update(UserRequest $request, User $user) { $user->fill( $request->all() )->save(); return redirect()->route('users.index'); }

投稿2019/11/15 12:01

編集2019/11/16 03:35
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki84web

2019/11/15 13:35

ありがとうございます。パラメータの指定が違っていたということですね。 editが"users/{user}/edit"であり"users/1/edit"でアクセスするので同じようにidを指定するものかと考えておりました。 現在手元に環境が無いので、後程確認致します。
退会済みユーザー

退会済みユーザー

2019/11/15 14:54

それだけじゃないです
yuki84web

2019/11/15 17:14 編集

こうでしょうか public function update(UserRequest $request, $id) ↓ public function update(UserRequest $request, User $user)
yuki84web

2019/11/16 04:21

ありがとうございます。idではなUserモデルが渡されるのでidを指定して取得する必要はないのですね。
退会済みユーザー

退会済みユーザー

2019/11/16 04:22

そこは本題じゃないはずですけど、 「The PATCH method is not supported for this route. Supported methods: GET, HEAD, POST. 」 こちらは解決した上での、話ですか???
yuki84web

2019/11/18 02:09

無事解決出来ました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問