前提・実現したいこと
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処理でとりあえず戻れるとあります。
今回それを使用せず解決したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/18 07:41
2019/10/18 07:47 編集
2019/10/18 07:52