Laravelにおけるコントローラクラスを理解しよう
人気のPHPフレームワークLaravelを習得しよう 第4回
https://codezine.jp/article/detail/11524
こちらで勉強しててLaravel8ではハマったのでメモします。
おそらく記事はver8以前の記述ではないかと思います。
#1.実装内容(エラー版)
ページに記載通りに
①Control Class
\app\Http\Controllers\HelloBladeWithDataController.php
<?php
namespace App\Http\Controllers; // (1)
use App\Http\Controllers\Controller; // (2)
class HelloBladeWithDataController extends Controller // (3)
{
public function __invoke() // (4)
{
$data["name"] = "武者小路"; // (5)
return view("helloWithData", $data); // (5)
}
}
②web.php
web.php
Route::get("/chap4/helloBladeWithData", "HelloBladeWithDataController");
③View Class
\resources\views\helloWithData.blade.php
<?php
namespace App\Http\Controllers; // (1)
use App\Http\Controllers\Controller; // (2)
class HelloBladeWithDataController extends Controller // (3)
{
public function __invoke() // (4)
{
$data["name"] = "武者小路"; // (5)
return view("helloWithData", $data); // (5)
}
}
#2.エラー内容
◆メッセージ
UnexpectedValueException
Invalid route action: [HelloBladeWithDataController].
#3.原因
Larave8でWeb.phpの記載ルールが変わった模様。。
#4.対処法
web.php
// エラー例
//Route::get("/chap4/helloBladeWithData", "HelloBladeWithDataController");
// 正解
Route::get("/chap4/helloBladeWithData", \App\Http\Controllers\HelloBladeWithDataController::class);
#5.おまけ invoke使わない例
url | control class | control method |
---|---|---|
/chap4/helloMusha | \App\Http\Controllers\Chap4Controller | helloMusha |
/chap4/helloNakano | 同上 | helloNakano |
\app\Http\Controllers\Chap4Controller.php
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class Chap4Controller extends Controller
{
public function helloMusha() // (1)
{
$data["name"] = "武者小路"; // (2)
return view("helloWithData", $data); // (2)
}
public function helloNakano() // (3)
{
$data["name"] = "中野"; // (4)
return view("chap3.hello", $data); // (4)
}
}
web.php
Route::get("/chap4/helloMusha", [\App\Http\Controllers\Chap4Controller::class,'helloMusha']);
Route::get("/chap4/helloNakano", [\App\Http\Controllers\Chap4Controller::class,'helloNakano']);
#参考元