【Laravel 8.x】Route::get()でいきなりハマった

Laravel

WebサーバーをアプリやらWebサービスで利用したいと思い

完全自作よりフレームワークを使ったほうが効率が良さそうなので

最近勢力を伸ばしてるというLaravelをAmazonで評価の高そうな本で勉強しようと思いました。

そしていきなりつまずいた話を今回は書いていきたいと思います。

Route::get()とは?

Route::get()とはルーティング用のメソッド

::はスコープ定義演算子というものでclass外から参照するために必要のようです。

C#で言えばstaticとかそういう感じ

getの中に記述したurlに飛べるようになるようだ。

問題発生

サンプルの通り試してみるとこのようなエラーページが

本に載ってた試したサンプルがこれ

公式に載ってるサンプルと同じようです。

web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;
/*
|--------------------------------------------------------------------------
| 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@index');

HelloController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    //
    public function index(){
        return 'こんにちは、世界!';
    }
}

エラーページの内容はHelloControllerなんてねえよと言われてしまいました。

そう言われても本を参考にしてサンプルの通りやってるわけなんだけど…

問題解決へ

Laravelについて調べていると頻繁にバージョンアップするようで、しかも結構大胆な仕様変更もあるらしくて書き方が変わったのではと色々調べてみました。

答えは公式にちゃんと載っていました。

公式リンク

use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

公式を参考にして以下のように書き換え

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;
/*
|--------------------------------------------------------------------------
| 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,'index']);

無事動作しました。

まとめ

今回の原因はRoute::get()の中身の記述仕方がバージョンアップにより変更になったというだけのことでした。

Laravelはまだ導入部分段階でよくわかっていませんが、情報通りバージョンアップする度にどんどん変更がされるようで早速壁にぶち当たるとは思っていませんでした(汗)

それではまた次の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました