前提・実現したいこと
編集画面で編集した文字をデータベースに保存したいです。
全体的な流れとしては、トップページ(index.blade.php)に様々な文言があり、その文言の隣の「編集する」ボタンを押せば、
編集画面に飛び(edit.blade.php)、文言の編集ができ、編集画面の「更新する」ボタンを押せば、
データベースのproverb_contactという項目が更新される、という仕様です。
発生している問題・エラーメッセージ
トップページから編集画面に飛び、編集する文言をinputタグに表示するところまではできました。
しかし、編集画面の「更新する」ボタンを押しても、下記のエラーメッセージが表示され、解決方法がわかりません。
教えていただけませんでしょうか?
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException **The GET method is not supported for this route. Supported methods: POST.** http://127.0.0.1:8000/update/1?proverb_contact=ygp79CGWZPToIj0BK7xxdkladadaa%3Bdass%EF%BD%84%E3%81%8B%EF%BD%93%EF%BC%9B
ビュー
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> <title>Document</title> </head> <body> <div class="jumbotron"> <form action="/update/{{$values->id}}" method="POST"> <div> <label>格言:</label> <div class="input-group mb-3"> <input name="proverb_contact" type="text" class="form-control" value="{{ $values->proverb_contact }}" autofocus> </div> </div> <button type="submit" class="btn btn-info">更新する</button> </form> </div> </body> </html>
コントローラー
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Models\ProverbForm; class ProverbFormController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // // $proverbs = DB::table('proverbs')->select('proverb_contact')->inRandomOrder() // ->first(); $proverbs = DB::table('proverbs')->inRandomOrder() ->first(); $proverbs_contact = DB::table('proverbs')->get(); //$value= ProverbForm::all();//Modelを使って取得してみたが、なぜかエラー return view('Proverb.index', compact('proverbs'), compact('proverbs_contact')); //return view('Proverb.index'); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show(Request $request) { // // 確認画面 // $proverb_contact = $request->proverb_contact; // // 確認画面に表示する値を格納 // $input_data = [ // 'proverb_contact' => $proverb_contact // ]; // return view('Proverb.confirm', $input_data); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // $values = DB::table('proverbs')->where('id', '=', $id)->first(); return view('Proverb.edit', compact('values')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $values, $id) { // dd($id); $values_update = DB::table('proverbs')->where('id', '=', $id)->first(); // $contact = ContactForm::find($id); dd($values_update); $values_update->proverb_contact = $values->input('proverb_contact'); $values_update->save(); return redirect('Proverb.index'); } }
ルート
<?php use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ // Route::get('/', function () { // return view('welcome'); // }); Route::get('/', 'ProverbFormController@index'); // ↓編集画面に推移ルーティング Route::get('/edit/{id}', 'ProverbFormController@edit'); Route::post('/update/{id}', 'ProverbFormController@update'); Route::resource('Proverb', 'ProverbFormController');
試したこと
エラーメッセージ:
The GET method is not supported for this route. Supported methods: POST.
- コントローラーとビューがポスト通信になっているか確認した。→なっていた。
- エラーメッセージでググった。→特に有益な情報は見つからなかった。
回答2件
あなたの回答
tips
プレビュー