実現したいこと
子ネコでもデキル!初心者向け!Laravel9とCloud9で作る顧客管理システム(超長文) 2.0版 後編を参考にして、登録した顧客の詳細ページを作る勉強をしており、一覧から詳細ページへ飛べるようにしたいです。
前提
参考サイトに記載されているコードをweb.phpにもCustomerControllerにも記載しました。
発生している問題・エラーメッセージ
Illuminate \ Contracts \ Container \ BindingResolutionException PHP 8.1.21 9.52.11 Target class [CustomerController] does not exist.
該当のソースコード
web.php
1Route::get('/', function () { 2 return view('welcome'); 3}); 4Route::get('newpage',[\App\Http\Controllers\NewPageController::class, 'newpage']); 5Route::get('/shops', [\App\Http\Controllers\ShopListController::class, 'index']); 6 7Auth::routes(); 8 9Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); 10Route::get('/roles', [App\Http\Controllers\RoleController::class,'index'])->name('ロール一覧')->middleware('auth'); 11Route::resource('/customers', \App\Http\Controllers\CustomerController::class)->middleware('auth'); 12#Route::resource('/customers', 'CustomerController')->middleware('auth'); 13Route::get('/users', [App\Http\Controllers\UserController::class, 'index'])->name('社員一覧')->middleware('auth'); 14 15URL::forceScheme('https');
CustomerController
1/** 2 * Display the specified resource. 3 * 4 * @param \App\Models\Customer $customer 5 * @return \Illuminate\Http\Response 6 */ 7 public function show(Customer $customer) 8 { 9 $this->authorize('view', $customer); 10 return view('customers.show', compact('customer')); 11 }
views/customers/show.blade.php
1@extends('layouts.app') 2@section('content') 3 <div class="container"> 4 <div class="row justify-content-center"> 5 <div class="col-md-12"> 6 <div class="card"> 7 <div class="card-header">{{ $customer->name }}({{ $customer->id }})</div> 8 <p>店舗:{{ $customer->shop['name'] }}</p> 9 <p>郵便番号:{{ $customer->postal }}</p> 10 <p>住所:{{ $customer->address }}</p> 11 <p>メール:{{ $customer->email }}</p> 12 <p>生年月日:{{ $customer->birthdate }}</p> 13 <p>電話番号:{{ $customer->phone }}</p> 14 <p>クレーマーフラグ:{{ $customer->kramer_flag }}</p> 15 <p>更新日:{{ $customer->created_at }}</p> 16 <p>登録日日:{{ $customer->updated_at }}</p> 17 18 </div> 19 <br/> 20 <div class="card"> 21 <form action="/customers/{{$customer->id}}/logs" method="POST"> 22 @csrf 23 Log: <input type="text" name="log" value="{{old('log')}}"> 24 <button type="submit" class="btn btn-sm btn-outline-primary">投稿</button> 25 </form> 26 27 </div> 28 <br/> 29 <div class="card"> 30 <ul> 31 @foreach($customer->customerLogs as $log) 32 <li> 33 {{ $log->log }}<br/> 34 記入時刻:{{ $log->created_at }} 記入者:{{ $log->user->name }}<br/> 35 <br/> 36 </li> 37 @endforeach 38 </ul> 39 </div> 40 </div> 41 </div> 42 </div> 43@endsection
試したこと
web.phpもroute設定が間違っていると思い、ルーティング一覧を確認しました。
するとエラーが発生しました。
ReflectionException Class "CustomerController" does not exist at vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php:234 230▕ if ($this->isFrameworkController($route)) { 231▕ return false; 232▕ } 233▕ ➜ 234▕ $path = (new ReflectionClass($route->getControllerClass())) 235▕ ->getFileName(); 236▕ } else { 237▕ return false; 238▕ } +3 vendor frames 4 [internal]:0 Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}() +17 vendor frames 22 artisan:37 Illuminate\Foundation\Console\Kernel::handle()
なので、詳細確認ページのコードをコメントアウトして、再度ルーティングの確認を行うと、一覧を確認できまして、customerのshowページのルーティングを見つけました。
GET|HEAD customers/{customer} .................................................................. customers.show › CustomerController@show
再度、サーバーを起動して、確認したところ、下記のコードによって、詳細ページどころか、一覧ページまでもが上記のエラーが表示されました。
Route::resource('/customers',
1Route::get('/users', [App\Http\Controllers\UserController::class, 'index'])-
補足情報(FW/ツールのバージョンなど)
php: PHP 8.1.21 (cli) (built: Jul 4 2023 23:26:29) (NTS gcc x86_64)
laravel: Laravel Framework 9.52.11
0 コメント