前提・実現したいこと
Laravel8で、シングルアクションコントローラのHelloControllerクラスをブラウザ表示させたい。
発生している問題・エラーメッセージ
使っている教材がLaravel6のため、Laravel8でのコントローラのブラウザ表示の仕方がわからなく困っています。
教材では、ルート情報はコントローラ名のみの記述と記載されいますが、Laravel8では、コントローラ名::classで記述すると下記のサイトに記載されていました。
https://readouble.com/laravel/8.x/ja/controllers.html
該当コードのようにLaravel8のルールに従ってルート情報を記述したのですが、エラーが出てしまいます。
該当コードに間違っている箇所があればご指摘いただきたいです。
UnexpectedValueException Invalid route action: [HelloController]. http://127.0.0.1:10080/hello Hide solutions `HelloController` is not invokable. The controller class HelloController is not invokable. Did you forget to add the __invoke method or is the controller's method missing in your routes file?
該当のソースコード
「HelloController.php」
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function _invoke() { return <<<EOF <html> <head> <title>Hello</title> <style> body {font_size:16pt; color:#999; } h1 { font-size:30pt; text-align:right; color:#eee; margin:-15px 0px 0px 0px; } </style> </head> <body> <h1>Single Action</h1> <p>これは、シングルコントーラのアクションです。</p> </body> </html> EOF; } }
「web.php」
<?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('hello', HelloController::class);
試したこと
Route::get('hello', 'HelloController::class'); ↓ //コントローラ名のシングルクォーテーションを削除 Route::get('hello', HelloController::class); //両ファイルにuseを追加 use App\Http\Controllers\HelloController;
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。