前提・実現したいこと
PHP(laravel)でCRUD+Gate機能でアカウントごとに操作権限がことなるようなアプリを作っています。
その過程で表題のエラーが発生し、原因がわからないので質問させていただきました。
管理者アカウント(role=5)でログインしていて、テーブルのデータを編集しようとするとき、
indexページからeditページに遷移する時にエラーが 起きます。
index,create,deleteは正常に機能しています。
発生している問題・エラーメッセージ
debugbarの表示
Symfony\Component\Routing\Exception\RouteNotFoundException Route [equipment.update] not defined. (View: C:\MAMP\htdocs\Equipment\resources\views\equipments\edit.blade.php) http://127.0.0.1:8000/equipment/edit/4
該当のソースコード
コントローラー
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\EquipmentForm; use Illuminate\Support\Facades\DB; use App\Services\CheckFormData; class EquipmentController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $equipments =DB::table('equipment_forms') ->select('id','name','borrowed','checkout','returned','confirmed','description') ->orderBy('id','desc') ->paginate(10); $borrowarr =array(); $confirmarr =array(); foreach($equipments as $value){ $borrowed =CheckFormData::CheckBorrowed($value); $confirmed=CheckFormData::CheckConfirmed($value); $borrowarr[] =$borrowed; $confirmarr[]=$confirmed; } return view('equipments.index',compact('equipments','borrowarr','confirmarr')); } 略 public function edit($id) { $equipment =EquipmentForm::find($id); return view('equipments.edit',compact('equipment')); } public function update(Request $request, $id) { $equipment =EquipmentForm::find($id); $equipment->name = $request->input('name'); $equipment->borrowed = $request->input('borrowed'); $equipment->checkout = $request->input('checkout'); $equipment->returned = $request->input('returned'); $equipment->description=$request->input('description'); $equipment->confirmed= $request->input('confirmed'); $equipment->save(); return redirect('equipment/index'); } 略 }
edit.blade.php
@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Dashboard</div> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif <form method="POST" action="{{route('equipment.update',['id'=>$equipment->id])}}"> @csrf <!-- 氏名 <input type="text" name="name"> 貸出物 <select name="borrowed"> <option value=""></option> <option value="1">A</option> <option value="2">B</option> <option value="3">C</option> <option value="4">D</option> <option value="5">E</option> <option value="6">F</option> <option value="7">G</option> <option value="8">H</option> <option value="9">I</option> </select> 貸出日 <input type="date" name="checkout"> 返却日 <input type="date" name="returned"> 備考 <textarea name="description"></textarea> --> <input type="radio" name="confirmed"value="0">貸出中 <input type="radio" name="confirmed" value="1">返却済 <input class="btn btn-info" type="submit" value="更新する"> </form> </div> </div> </div> </div> </div> @endsection
index.blade.php
@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-12"> <div class="card"> <div class="card-header">ダッシュボード</div> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif <form method="GET" action="{{route('equipment.create')}}"> <button type="submit"class="btn btn-primary">新規登録</button> </form> <table class="table table-striped"> <thead> <tr> <th scope="col">id</th> <th scope="col">氏名</th> <th scope="col">貸出物</th> <th scope="col">貸出日</th> <th scope="col">返却日</th> <th scope="col">状態</th> <th scope="col">備考</th> <th scope="col"></th> <th scope="col"></th> </tr> </thead> <tbody> @foreach($equipments as $equipment) <tr> <th>{{$equipment->id}}</th> <td>{{$equipment->name}}</td> <td>{{$borrowarr[$loop->iteration -1]}}</td> <td>{{$equipment->checkout}}</td> <td>{{$equipment->returned}}</td> <td><span class="badge badge-success">{{$confirmarr[$loop->iteration -1]}}</span></td> <td>{{$equipment->description}}</td> @can('admin-higher') <td><a href="{{ route('equipment.edit',['id'=> $equipment->id])}}">編集</a></td> <td> <form method="POST" action="{{route('equipment.destroy',['id'=> $equipment->id])}}"> @csrf <button type="submit"class="btn btn-danger">削除する</button> </form> </td> @endcan @endforeach </tbody> </table> {{$equipments->links()}} </div> </div> </div> </div> </div> @endsection
web.php
<?php /* |-------------------------------------------------------------------------- | 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! | */ Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); Route::get('/', function () { return view('welcome'); }); //全ユーザに許可 Route::group(['prefix'=>'equipment','middleware'=>['auth','can:user-higher']],function(){ Route::get('index','EquipmentController@index')->name('equipment.index'); Route::get('create','EquipmentController@create')->name('equipment.create'); Route::post('store','EquipmentController@store')->name('equipment.store'); }); //管理者以上 Route::group(['prefix'=>'equipment','middleware'=>['auth','can:admin-higher']],function(){ Route::post('index','EquipmentController@index')->name('equipment.index'); Route::get('edit/{id}','EquipmentController@edit')->name('equipment.edit'); Route::post('update/{id}','EquipmentController@update')->name('equipmnet.update'); Route::post('destroy/{id}','EquipmentController@destroy')->name('equipment.destroy'); }); //開発者以上 Route::group(['prefix'=>'equipment','middleware'=>['auth','can:system-only']],function(){ });
試したこと
ルーティング、コントローラーの記述をしているのになぜ route[equipment.update] が定義されていないという
エラーになるのかが分かりません。
https://teratail.com/questions/265218
似たような質問がありましたが、ルートの重複はしていないと思います。
エラ-後半の記述から throw new RouteNotFoundException("Route [{$name}] not defined.");とあり
ルーティングかコントローラーの記述でミスしているところがあるような気がしてますが、
自分で間違いが見つけられなかったので、ご指摘いただきたいです。
補足情報(FW/ツールのバージョンなど)
vscode1.62.0
PHP 7.4.16
Laravel Framework 6.20.37
MAMP(windows) 5.0.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/09 12:29