laravel:問い合わせフォーム実装でのエラー
解決したいこと
HTTPメソッド:post
ルートパス:/thanks
コントローラ:ContactController
アクション:store
上記におけるデータ保存・完了ページ表示を実現したいです。
3日ほどここでつまずいており、大変困っています...。
発生している問題・エラー
The GET method is not supported for this route. Supported methods: POST.
該当するソースコード
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ContactController;
Route::get('/',[ContactController::class, 'index']);
Route::post('/confirm',[ContactController::class, 'confirm']);
Route::post('/thanks',[ContactController::class, 'store']);
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ContactRequest;
use App\Models\Contact;
use App\Models\Category;
class ContactController extends Controller
{
public function index()
{
$categories = Category::all();
return view('index',compact('categories'));
}
public function confirm(ContactRequest $request)
{
$contact = $request->only(['first_name', 'last_name','gender','email', 'tell1','tell2','tell3', 'address','building','category_id','detail']);
$category = Category::find($contact['category_id']);
return view('confirm', compact('contact','category'));
}
public function store(ContactRequest $request)
{
$contact = $request->only(['first_name', 'last_name','gender','email', 'tell1','tell2','tell3', 'address','building','category_id','detail']);
Contact::create($contact);
return view('thanks');
}
}
// 中略
@section('content')
<div class="confirm__content">
<div class="confirm__heading">
<h2>Confirm</h2>
</div>
<form class="form" action="/thanks" method="post">
@csrf
<div class="confirm-table">
<table class="confirm-table__inner">
<tr class="confirm-table__row">
<th class="confirm-table__header">お名前</th>
<td class="confirm-table__text">
<p>{{ $contact['first_name'] }}</p>
<input type="hidden" name="first_name" value="{{ $contact['first_name'] }}"/>
<p>{{ $contact['last_name'] }}</p>
<input type="hidden" name="last_name" value="{{ $contact['last_name'] }}"/>
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">性別</th>
<td class="confirm-table__text">
<p>
@php
switch($contact['gender']){
case "1":
echo "男性";
break;
case "2":
echo "女性";
break;
case "3":
echo "その他";
break;
}
@endphp
</p>
<input type="hidden" name="gender" value="{{ $contact['gender'] }}"/>
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">メールアドレス</th>
<td class="confirm-table__text">
<p>{{ $contact['email'] }}</p>
<input type="hidden" name="email" value="{{ $contact['email'] }}"/>
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">電話番号</th>
<td class="confirm-table__text">
<p>{{ $contact['tell1'] }}{{ $contact['tell2'] }}{{ $contact['tell3'] }}</p>
<input type="hidden" name="tell" value="{{ $contact['tell1'] }}{{ $contact['tell2'] }}{{ $contact['tell3'] }}"/>
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">住所</th>
<td class="confirm-table__text">
<p>{{ $contact['address'] }}</p>
<input type="hidden" name="address" value="{{ $contact['address'] }}"/>
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">建物名</th>
<td class="confirm-table__text">
<p>{{ $contact['building'] }}</p>
<input type="hidden" name="building" value="{{ $contact['building'] }}"/>
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">お問い合わせの種類</th>
<td class="confirm-table__text">
<p>{{ $category['content'] }}</p>
<input type="hidden" name="category_id" value="{{ $contact['category_id'] }}">
</td>
</tr>
<tr class="confirm-table__row">
<th class="confirm-table__header">お問い合わせ内容</th>
<td class="confirm-table__text">
<p>{!! nl2br(e($contact['detail'])) !!}</p>
<input type="hidden" name="detail" value="{{ $contact['detail'] }}"/>
</td>
</tr>
</table>
</div>
<div class="form__button">
<button class="form__button-submit" type="submit">送信</button>
<a class="form__button-correction" href="#" onclick="event.preventDefault(); history.back();">修正</a>
</div>
</form>
</div>
@endsection
自分で試したこと
○Route::get('/confirm',[ContactController::class, 'confirm']); を追記
→リダイレクトが繰り返し行われ、エラー
○バリデーションの確認
→バリデーションに失敗し、前の画面へリダイレクト(get)していた為ルーティングが見つからずエラーした可能性を考え、index.blade.phpファイル(入力フォーム用のviewファイル)におけるバリデーション記述箇所をコメントアウトするも同エラー
○デベロッパーツールで動作確認
→リクエストURL:http://localhost/confirm
リクエストメソッド:GET
ステータスコード:405 Method Not Allowed