前提・実現したいこと
Laravel8でコントローラの「index」メソッドにaction()でリンクを作成して、そこから「show」メソッドに移動するという処理を行いたいのですが、「index」メソッドのViewを開くと「Action laravel_practicesController@show not defined.」というエラーが出てしまいました。
エラーについて調べるとルーティングを追加するとあったので、ルーティングに「Route::get('/laravel_practices/{id}', 'laravel_practicesController@show')」を追加したら「index」メソッドは正常に開くようになったのですが、リンクから「show」メソッドに移動すると、
今度は「Target class [laravel_practicesController] does not exist.」のエラーが出てしまっています。
「show」のルーティングをLaravel8の書き方で書くとアクションの定義がなされず、
Laravel8以前のルーティングで書くとリンクに移動するときにクラスが存在しないというエラーが出てしまい、
ルーティングでエラーを解決できません。
Laravel8でactionで生成したリンクのメソッドを表示する方法について他に何かあるでしょうか?
発生している問題・エラーメッセージ
InvalidArgumentException Action laravel_practicesController@show not defined. (View: C:\xampp\htdocs\PHP\sample\resources\views\laravel_practices\index.blade.php)
Illuminate\Contracts\Container\BindingResolutionException Target class [laravel_practicesController] does not exist.
該当のソースコード
"C:\xampp\htdocs\PHP\sample\routes\web.php"
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\laravel_practicesController; Route::get('/', [laravel_practicesController::class, 'index']); Route::get('/laravel_practices/{id}', [laravel_practicesController::class, 'show']);
"C:\xampp\htdocs\PHP\sample\app\Http\Controllers\laravel_practicesController.php"
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\laravel_practice; use App\Http\Controllers\laravel_practicesController; class laravel_practicesController extends Controller { public function index() { // $laravel_practices = laravel_practice::all(); $laravel_practices = laravel_practice::latest()->get(); // $laravel_practices = []; // dd($laravel_practice->toArray()); return view('laravel_practices.index')->with('laravel_practices', $laravel_practices); } public function show($id) { $laravel_practice = laravel_practice::findOrFail(); return view('laravel_practices.show')->with('laravel_practice', $laravel_practice); } }
"C:\xampp\htdocs\PHP\sample\resources\views\laravel_practices\index.blade.php"
<!DOCTYPE html> <html lang = "ja"> <head> <meta charset = "utf-8"> <title>Blog Posts</title> <link rel = "stylesheet" href = "/css/styles.css"> </head> <body> <div class = "container"> <h1>Blog Posts</h1> <ul> @forelse($laravel_practices as $laravel_practice) <li><a href = "{{action([laravel_practicesController::class, 'show'], $laravel_practice->id)}}">{{$laravel_practice->tittle}}</a></li> @empty <li>No posts yet</li> @endforelse </ul> </div> </body> <html>
"C:\xampp\htdocs\PHP\sample\resources\views\laravel_practices\show.blade.php"
<!DOCTYPE html> <html lang = "ja"> <head> <meta charset = "utf-8"> <title>$laravel_practice->tittle</title> <link rel = "stylesheet" href = "/css/styles.css"> </head> <body> <div class = "container"> <h1>$laravel_practice->tittle</h1> <p>{!! nl2br(e($laravel_practice->body)) !!}</p> </div> </body> <html>
試したこと
ルーティングに「Route::get('/laravel_practices/{id}', 'laravel_practicesController@show')」を追加した
以下、参考記事
https://qiita.com/hththt/items/38906ba3f46ead6bba25
https://dotinstall.com/lessons/basic_laravel_v2/42214
https://dotinstall.com/lessons/basic_laravel_v2/42215
https://teratail.com/questions/116877
https://www.it-swarm-ja.tech/ja/php/laravel-action-not-defined/1051901262/
補足情報(FW/ツールのバージョンなど)
Laravel8
PHP 7.4.10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/07 06:06