質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1381閲覧

The PUT method is not supported for route profile. Supported methods: GET, HEAD, POSTを解決したい。

arichandana

総合スコア4

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/07/26 08:27

編集2023/07/27 02:32

イメージ説明### 実現したいこと
パスワードを更新したいです。

前提

laravelを使ってkitaアプリを作成しています。
パスワード更新機能を作成しようとしたところ@method('put')を指定しているのにThe PUT method is not supported for route profile. Supported methods: GET, HEAD, POSTというエラーが表示されて解決できません。

発生している問題・エラーメッセージ

機能を実装したところエラーが出てしまいました。
どうしてputで投稿できないかがさっぱりわからないので教えていただけると嬉しいです。
よろしくお願いいたします。

The PUT method is not supported for route profile. Supported methods: GET, HEAD, POST.

該当のソースコード

web.php

1<?php![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-07-27/a3f30607-d3a6-4de0-9328-71b4ab38588f.png) 2use Illuminate\Support\Facades\Route; 3use App\Http\Controllers\Auth\RegisterController; 4use App\Http\Controllers\Auth\LoginController; 5use App\Http\Controllers\ArticlesController; 6use App\Http\Controllers\CommentsController; 7use App\Http\Controllers\ProfileController; 8use App\Http\Controllers\PasswordController; 9 10/* 11|-------------------------------------------------------------------------- 12| Web Routes 13|-------------------------------------------------------------------------- 14| 15| Here is where you can register web routes for your application. These 16| routes are loaded by the RouteServiceProvider within a group which 17| contains the "web" middleware group. Now create something great! 18| 19*/ 20Route::get('/', function () { 21 return view('example'); 22}); 23Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); 24// 会員登録ルート 25Route::get('/member_registration', [RegisterController::class, 'showRegistrationForm'])->name('register'); 26Route::post('/member_registration', [RegisterController::class, 'register']); 27// ログインルート 28Route::get('login', [LoginController::class, 'showLoginForm'])->name('login'); 29Route::post('login', [LoginController::class, 'login']); 30// ログアウトルート 31Route::post('logout', [LoginController::class, 'logout'])->name('logout'); 32//記事一覧機能 33Route::get('/articles', [ArticlesController::class, 'index'])->name('index'); 34//記事検索機能 35Route::get('/articles/search', [ArticlesController::class, 'search'])->name('articles.search'); 36//記事作成機能 37Route::get('/articles/create', [ArticlesController::class, 'showCreatePage'])->name('articles.create'); 38Route::post('/articles', [ArticlesController::class, 'store'])->name('store'); 39//記事編集機能 40Route::get('/articles/{id}/edit', [ArticlesController::class, 'showEditPage'])->name('articles.edit'); 41Route::post('/articles/{id}', [ArticlesController::class, 'update'])->name('update'); 42//記事詳細表示機能 43Route::get('/articles/{id}', [ArticlesController::class, 'show'])->name('articles.show'); 44//コメント投稿機能 45Route::post('/articles/{id}', [CommentsController::class, 'store'])->name('comments.store'); 46//記事削除機能 47Route::delete('/artilces/{id}', [ArticlesController::class, 'delete'])->name('articles.delete'); 48//プロフィール編集ページに遷移 49Route::get('/profile', [ProfileController::class, 'showEditProfilePage'])->name('profile.edit')->middleware('auth'); 50//プロフィール編集機能 51Route::post('/profile', [ProfileController::class, 'update'])->name('profile.update')->middleware('auth'); 52// パスワード変更機能 53Route::put('/password_change', [PasswordController::class, 'changePassword'])->name('password.update')->middleware('auth'); 54

passwordcontroller.php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7use Illuminate\Support\Facades\Hash; 8use Illuminate\Support\Facades\Validator; 9 10class PasswordController extends Controller 11{ 12 // 13 public function changePassword(Request $request) { 14 $member = Auth::user(); 15 16 $validator = Validator::make($request->all(), [ 17 'password' => 'required|string|min:8|confirmed', 18 ]); 19 20 if ($validator->fails()) { 21 return redirect()->route('profile.edit')->withErrors($validator)->withInput(); 22 } 23 24 $member->password = Hash::make($request->input('password')); 25 $member->save(); 26 27 return redirect()->route('profile.edit')->with('message', 'プロフィールを編集しました。'); 28 } 29} 30

profile.blade.php

1 <div class="col-md-3 px-0"> 2 <button type="button" class="btn btn-success rounded-pill" data-bs-toggle="modal" data-bs-target="#passwordChangeModal">パスワードを変更する</button> 3 </div> 4 <!-- パスワード変更モーダル --> 5 <div class="modal fade" id="passwordChangeModal" tabindex="-1" aria-labelledby="passwordChangeModalLabel" aria-hidden="true"> 6 <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> 7 <div class="modal-content"> 8 <!-- モーダルのヘッダー --> 9 <div class="modal-header"> 10 <h5 class="modal-title" id="passwordChangeModalLabel">パスワードを変更する</h5> 11 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 12 </div> 13 14 <!-- モーダルのボディ --> 15 <div class="modal-body"> 16 <div class="form px-3"> 17 {{ Form::open(['route' => 'password.update', 'files' => true, 'method' => 'PUT']) }} 18 @method('PUT') 19 @csrf 20 <input type="hidden" name="_method" value="PUT"> 21 <!--新しいパスワード--> 22 <div class="row pt-3"> 23 {{Form::label('password', '新しいパスワード', ['class' => 'col-md-12 col-12 px-0'])}} 24 </div> 25 26 <div class="row pt-1"> 27 {{Form::text('password', null, ['class'=>'title col-md-12 col-12 border border-success mt-2 rounded'])}} 28 </div> 29 30 <!--確認用のパスワード--> 31 <div class="row pt-3"> 32 {{Form::label('password_confirmation', '新しいパスワード(確認)', ['class' => 'col-md-12 col-12 px-0'])}} 33 </div> 34 35 <div class="row pt-1"> 36 {{Form::text('password_confirmation', null, ['class'=>'title col-md-12 col-12 border border-success mt-2 rounded'])}} 37 </div> 38 39 <!--更新ボタン--> 40 <div class="row"> 41 <div class="col-md-12 col-12 text-md-end px-0"> 42 {{Form::submit('更新する', ['class'=>'submit_button btn btn-success my-3 rounded-pill'])}} 43 </div> 44 </div> 45 {{ Form::close() }} 46 </div> 47 </div> 48 </div> 49 </div> 50 </div> 51 </div> 52 <!--投稿ボタン--> 53 <div class="row"> 54 <div class="col-md-12 col-12 text-md-end px-0"> 55 {{Form::submit('更新する', ['class'=>'submit_button btn btn-success my-3 rounded-pill'])}} 56 </div> 57 </div> 58 {{ Form::close() }} 59 </div> 60 </div> 61 </div> 62 </div> 63 </div> 64@endsection 65

試したこと

@method('put')を適用。
フォームの修正
キャッシュのクリア

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

同ページにあるプロフィール変更機能をputに修正。
その後フォームを閉じる位置を修正しました。

投稿2023/07/27 04:30

arichandana

総合スコア4

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

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

0

ベストアンサー

投稿2023/07/26 09:23

編集2023/07/27 00:56
FKM

総合スコア3660

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

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

arichandana

2023/07/26 13:55 編集

解凍してくださってありがとうございます。hiddenで埋め込むのと、@method('put')は同じ意味だったと思うのですが、@method('put')を書いているのにエラーが解決できないので、違うんじゃないかなあと思います。
FKM

2023/07/26 14:06 編集

よく見たら二重に書き込んでるので、それが原因では?hiddenの方はcsrfで制御してないのでそこで弾いてる可能性があります。 @method('PUT') @csrf <input type="hidden" name="_method" value="PUT">
arichandana

2023/07/26 23:27

初めは@method('PUT') @csrfと書いていたのにいかなかったので追加したのですが、@method('PUT') @csrfだけ記述した場合も解決できませんでした。
FKM

2023/07/27 00:36 編集

改めて確認してみたらformタグのmethodがputになってます。ここはhtmlの仕様以外記述できないので、postかget以外受け付けないです。開発コンソールを見て確認してみてください。 つまり 1)formタグは一旦method="post"としておいてから、postで転送 2)bladeで(@method('PUT'))とするかhiddenでname="_method"のvalueを"PUT"とすることで、post転送された後、ルーティング先はputで判断するようになる。 3)ルーティングファイルに従ってputの遷移先のアクションに遷移する。 こういう流れのようです。
arichandana

2023/07/27 00:35

おはようございます。 以下のように修正したのですが、治りませんでした。 {{ Form::open(['route' => 'password.update', 'files' => true]) }} @csrf @method('PUT')
FKM

2023/07/27 00:53 編集

色々調べて自分が実装したシステムにも当てはめてみましたが、 file => true としている場合は自動でenctype設定してくれるため、post以外受け付けないようです。なのでputが受け付けないのはfile=> trueにしているせいでもあるようです。 https://stackoverflow.com/questions/39344259/laravel-5-1-form-files-true Form::openを使うならば、CSRFも埋め込まれるので、逐一bladeの追記はいらないようです。 https://qiita.com/manbolila/items/b364088e821f4c946229
arichandana

2023/07/27 00:59

file=>trueでpostだけを受け付けるようにしていることを知りませんでした!ただ、これを消しても同じエラーが解決できません。 ビューファイルの記述が間違っているのでしょうか? <head> <title>プロフィール編集ページ</title> </head> @extends('articles.header') @section('content') <div class="container py-5"> <div class="d-flex align-items-center justify-content-center" style="--bs-bg-opacity: .1;"> <div class="col-md-8 col-10 bg-white text-dark"> @if (session('message')) <div class="alert alert-success"> {{ session('message') }} </div> @endif <div class="card"> <div class="card-body px-5 py-3"> <div class="row pt-3"> <h2 class="col-md-12 col-12 border-bottom border-dark py-2">プロフィール編集</h2> </div> {{ Form::open(['route' => 'profile.update', 'method' => 'POST']) }} @csrf <!--タイトル--> <div class="row pt-3"> {{Form::label('name', 'ユーザー名', ['class' => 'col-md-12 col-12 px-0'])}} </div> <div class="row pt-1"> {{Form::text('name', null, ['class'=>'title col-md-12 col-12 border border-success mt-2 rounded'])}} </div> <!--メールアドレス--> <div class="row pt-3"> {{Form::label('email', 'メールアドレス', ['class' => 'col-md-12 col-12 px-0'])}} </div> <div class="row pt-1"> {{Form::text('email', null, ['class'=>'title col-md-12 col-12 border border-success mt-2 rounded'])}} </div> <!--パスワード--> <div class="row pt-3 ml-0"> {{Form::label('password', 'パスワード', ['class' => 'col-md-12 col-12 px-0'])}} </div> <div class="row pt-1"> <div class="col-md-2 px-0"> <p>*****</p> </div> <div class="col-md-3 px-0"> <button type="button" class="btn btn-success rounded-pill" data-bs-toggle="modal" data-bs-target="#passwordChangeModal">パスワードを変更する</button> </div> <!-- パスワード変更モーダル --> <div class="modal fade" id="passwordChangeModal" tabindex="-1" aria-labelledby="passwordChangeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> <div class="modal-content"> <!-- モーダルのヘッダー --> <div class="modal-header"> <h5 class="modal-title" id="passwordChangeModalLabel">パスワードを変更する</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <!-- モーダルのボディ --> <div class="modal-body"> <div class="form px-3"> {{ Form::open(['route' => 'password.update']) }} @csrf @method('put') <!--新しいパスワード--> <div class="row pt-3"> {{Form::label('password', '新しいパスワード', ['class' => 'col-md-12 col-12 px-0'])}} </div> <div class="row pt-1"> {{Form::text('password', null, ['class'=>'title col-md-12 col-12 border border-success mt-2 rounded'])}} </div> <!--確認用のパスワード--> <div class="row pt-3"> {{Form::label('password_confirmation', '新しいパスワード(確認)', ['class' => 'col-md-12 col-12 px-0'])}} </div> <div class="row pt-1"> {{Form::text('password_confirmation', null, ['class'=>'title col-md-12 col-12 border border-success mt-2 rounded'])}} </div> <!--更新ボタン--> <div class="row"> <div class="col-md-12 col-12 text-md-end px-0"> {{Form::submit('更新する', ['class'=>'submit_button btn btn-success my-3 rounded-pill'])}} </div> </div> {{ Form::close() }} </div> </div> </div> </div> </div> </div> <!--投稿ボタン--> <div class="row"> <div class="col-md-12 col-12 text-md-end px-0"> {{Form::submit('更新する', ['class'=>'submit_button btn btn-success my-3 rounded-pill'])}} </div> </div> {{ Form::close() }} </div> </div> </div> </div> </div> @endsection
FKM

2023/07/27 01:21 編集

Form::openを使用する場合、特定methodだと自動でcsrfトークンが埋め込まれるので、bladeを追記してはいけないようですね。 ↓モーダルのボディの部分です <div class="form px-3"> {{ Form::open(['route' => 'password.update','method'=>'put']) }} //@csrf 消す //@method('put') 消す これでサーバーを再読み込みしてみてください。自分はこういう場合、部分部分でコメントアウトしてエラー位置を特定したりします。
arichandana

2023/07/27 01:24

{{ Form::open(['route' => 'password.update', 'method' => 'put']) }}と書き、キャッシュもクリアしたのですがダメでした。
FKM

2023/07/27 01:40 編集

基本に返ってですが、その上記のエラーはどのファイルの何行目に出ているかというヒントはないですか?フォーム設定だけでなく、ルーティング設定、フォームそのものの設定などでも出るエラーぽいので。
arichandana

2023/07/27 01:51

public/index.phpの五十二行目と表示されています。全画面のスクショも載せておきます。
FKM

2023/07/27 02:23 編集

そこはエラーキャプチャーですね。上の部分の26vendor framesを開いてみてください。 また、Form::openに対して開発コンソールのフォームはどのように見えていますか?
arichandana

2023/07/27 02:31

このように表示されています。画像を追加させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問