Laravelのルーティング(Routing)を知りたい
こちらの内容はLaravel公式のリファレンスをかなり参考にしています
ルーティングって日本語的に何?
Routing
名詞
・何かの移動や設置のために特定の経路や方角を使用すること
・コンピューターネットワーク間で情報を送信するプロセス(過程)
参照するサイトによってばらつきはあると思いますが、概ねこのような内容だと思います
むりやり訳すとしたら「誘導」とか。。。ですかね??
以下では、ルーティングの設定方法を解説し、最後にルーティングが何たるかの個人的考えを提案しています
※あくまで提案です笑
コードから感じる
まずはLaravelプロジェクト作成時に自動で作成されるルーティングを見てみます
routes\web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
getメソッドの第一引数にパス、第二引数にクロージャーを指定することでルーティングを制御しており、上記の場合、「http://localhost:8000/」が指定されるとview(‘welcome’)が実行されます
view(‘welcome’)は「app\resources\views」にある「welcome.blade.php」を指します
これをまねして自作のルーティングを作ります
まずはルーティング先(目的地)のファイルを作るため、「app\resources\views」に「適当な名前+.blade.php」を作成します
下記をコピーし、作成したファイルにペーストします
resources\views\home.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Home</title>
</head>
<body>
<div>
HOME
</div>
</body>
</html>
最後に「web.php」に下記の9行目以降を加え、「http://localhost:8000/適当な名前」にアクセスすると、真っ白画面にHOMEとだけ表示されるはずです
routes\web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('/home', function () {
return view('home');
});
ルーティングの基礎
すべてのLaravelのルートはroutesディレクトリにあるrouteファイルに定義されています
このファイルは「bootstrap\app.php」に定義されている設定内容をもとに自動的に読み込まれます
と公式に記載があるため見てみます
プロジェクト作成時の「bootstrap\app.php」は下記のとおりです
bootstrap\app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
9行目で「routes/web.php」がwebとして設定されているため、「http://localhost:8000/」にアクセスすると「routes/web.php」が読み込まれます
下記セクションで解説しているAPIの場合、apiとして設定したphpファイルは「http://localhost:8000/api/パス」で読み込まれます
このように「bootstrap\app.php」に設定されたphpファイルをLaravelが自動で読み取り、そこに定義されているルートを表示しています
APIのルーティング設定
APIのルーティングを設定するには下記のArtisanコマンドを実行します
php artisan install:api
このコマンドでLaravel Sanctumのインストール、「bootstrap\app.php」へのapi記述の追加、「routes\api.php」の作成が行われます
Laravel Sanctumとは強固でシンプルなAPIトークン認証機能を提供するものであり、SPA(シングルページアプリケーション)・モバイルアプリ・第三者のAPI使用の認証に使用します
「bootstrap\app.php」に追加されるapi記述は下記の10行目です
bootstrap\app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php', // 追加行
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
10行目に追加された内容は、apiの場合は「routes\api.php」を参照することを表しています
追加された「routes\api.php」は下記のとおりです
routes\api.php
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');
「bootstrap\app.php」でapiに指定されたURLには、自動的にパスの最初に「\api」が設定されます
これを変更する場合は、下記のように「bootstrap\app.php」にapiPrefixを指定します
...
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
apiPrefix: '任意の文字列/', // 追加行
)
...
このままではgetしようとしてもunauthenticated表示がされ、うまくできません
それについてはまた今度にしようと思います🙇♂️
ルーティングとは、指定されたパスとメソッドから、特定の処理や表示を行うことのようです
Laravelのルーティングの流れは下記の通りとなっており、どれが欠けてもうまく機能しません
「bootstrap\app.php → routes/XXX.php → 適切なphp」
ご質問等あればお気軽にコメントまでお願いいたします