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

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

詳細はこちら
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Laravel

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

7115閲覧

The GET method is not supported for this route. Supported methods: POST.

jiro-

総合スコア28

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Laravel

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/10/18 06:48

編集2019/10/18 07:23

前提・実現したいこと

Laravel -v 5.8.35で会員登録フォーム確認画面から、送信完了画面へ移動する際、入力内容修正、この内容で問い合わせるボタンを押すと以下のエラーメッセージが発生しました。ご教示よろしくお願い致します。

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

MethodNotAllowedHttpException The GET method is not supported for this route. Supported methods: POST.

該当のソースコード

原因のページ views/auth/register_confirm

@section('title', '会員登録確認') @section('content') <form method="post" action="{{ action('Auth\RegisterController@complete') }}"> @csrf <label>お名前</label> {{ $inputs2['name'] }} <input name="name" type="hidden" value="{{ $inputs2['name']}}"> <!-- 省略 --> <input type="submit" name="action" value="back"> 入力内容修正 <input type="submit" name="action" value="submit"> この内容で問い合わせる </form> @endsection

views/auth/register_complete

@extends('layouts.layout') @title('会員登録完了') @section('content') <h1>{{ __('送信完了しました') }}</h1> @endsection

App/Http/controllers/RegisterController

<?php namespace App\Http\Controllers\Auth; use App\User; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\Request; class RegisterController extends Controller { use RegistersUsers; protected $redirectTo = '/'; public function __construct() { $this->middleware('guest'); } protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'kname' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'gender' => 'required', 'birthday' => ['required', 'integer',], 'phone_num' => ['required', 'integer'], 'postal_code' => 'required', 'prefectures_name' => ['required', 'string', 'max:255'], 'city' => ['required', 'string', 'max:255'], 'subsequent_address' => ['required', 'string', 'max:255'] ]); } protected function create(array $data) { return User::create([ 'name' => $data['name'], 'reading' => $data['reading'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'gender' => $data['gender'], 'birthday' => $data['birthday'], 'phone_num' => $data['phone_num'], 'postal_code' => $data['postal_code'], 'prefectures_name' => $data['prefectures_name'], 'city' => $data['city'], 'subsequent_address' => $data['subsequent_address'] ]); } //会員登録確認画面へ移動するactionです public function confirm(Request $request) { $inputs2 = $request->all(); return view('auth/register_confirm', ['inputs2' => $inputs2]); } //会員登録完了画面or入力内容修正画面に戻るへ移動するactionです public function complete(Request $request) { \Debugbar::info("test"); $this->validate($request,[ 'name' => 'required', 'kname' => 'required', 'email' => 'required', 'password' => 'required', 'gender' => 'required', 'birthday' => 'required', 'phone' => 'required', 'postal_code' => 'required', 'prefectures_name' => 'required', 'city' => 'required', 'subsequent_address' => 'required' ]); $action = $request->get('action', 'back'); $inputs2 = $request->except('action'); \Debugbar::info($inputs2); if($action === 'post') { \Mail::to($inputs2["email"])->send(new RegisterSendmail($inputs2)); $request->session()->regenerateToken(); return view('auth/register_complete'); } else { return redirect() ->route('register') ->withInput($inputs2); } } }

web.php

➀Route::post('register/confirm', 'Auth\RegisterController@confirm')->name('register_confirm'); ➁Route::post('register/complete', 'Auth\RegisterController@complete')->name('register_complete');

試したこと

1⃣上記web.phpの➁をmatchメソッドを使用しpost,get両方取得できるようにして実行
Route::match(['get', 'post'], 'register/complete', 'Auth\RegisterController@complete')->name('register_complete');
ターミナルでphp artisan route:listでルーティング確認し
| | GET|POST|HEAD | register/complete | register_complete | App\Http\Controllers\Auth\RegisterController@complete | web,guest
getもpostも取得できています
結果:同エラー

2⃣Route::get('register/complete', 'Auth\RegisterController@complete')->name('register_complete');
結果:同エラー

3⃣view側methodはpostのままで実行  
errorページのURLはhttp様表示/register/complete?afwhfoawhoh 結果:同エラー

4⃣view側methodをgetで実行      
errorページのURLはhttps様表示/register/complete 結果:同エラー

5⃣view側methodを['get', 'post']で実行  結果:同エラー

6⃣viewのform内の@csrfを削除 結果:419エラー

7⃣register.blade.php中のactionを2通り実行

<form action="{{ route('register_confirm')}}"> <form action="{{ action('Auth\RegisterController@complete') }}">   結果:同エラー

8⃣register.blade.php中の<input type="submit"><button type="submit">に変えて実行 結果:同エラー

9⃣以前、cartitemを作っている時に同様のエラーが起こり、その時は/addを下記のように追加してあげるとなぜか解決しました。
Route::post('/cartitem/add', 'CartItemController@store')->name('cartitem');
view側もaction="{{ route('/cartitem/add') }}
今回register_confirm/adと同様の事をしましたがエラー直らず

*試していないが、参考にさせて頂いたページにapp/Exceptions/Handler.phpのrenderメソッドをif文でMethodNotAllowedHttpExceptionエラーが起こった時に別ページにredirect処理でとりあえず戻れるとあります。
今回それを使用せず解決したいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

バリデーションに引っかかって内部でエラーを返している際にGET送信されてるきがします

投稿2019/10/18 07:28

sola-msr

総合スコア876

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

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

jiro-

2019/10/18 07:41

ご回答ありがとうございます。 おっしゃる通りcontrollerのcompleteアクションのバリデーションをコメントアウトしてみるとエラー起こらず進めました。 質問違いになってしまうかもしれないのですが、バリデーションは必要だと思うのですがコードの書き方が悪いのでしょうか?
sola-msr

2019/10/18 07:47 編集

んーそのあたりはFormRequestクラスを使えばいいのかなーと(自分も経験あるのですが解決策をすぐに思い出せず・・・) まあ確認画面を得ているということは値の検証ができてるので、そこでバリデーションチェックで引っかかるなら強制的に入力画面へリダイレクトさせてもいい気もします(できればほかの値は保持したままで)
jiro-

2019/10/18 07:52

ご丁寧にありがとうございます。 FormRequestクラスを使ってみるのと、バリデーション引っかかったら強制的に入力画面へリダイレクト(できればほかの値は保持したままで)も試してみて実装できそうならやってみます。 大変助かりましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問