Routingとは

Routing(ルーティング)の基本に関しては、「Webの基礎:MVC とルーティング」を参照してください。

ルーティングファイル

Laravelのルーティングファイルは、「routes/」フォルダ内のファイルで管理・設定します。

ルーティングファイル

ファイル 説明
api.php APIのアクセスを管理
channels.php ブロードキャストチャンネルのアクセス管理
console.php コンソールプログラムの管理
web.php 一般的なWebページのアクセス管理

ルーティングのファイル確認

Webルーティング

Web用のルーティングファイルは「routes/web.php」です。

ルーティングの内容

ルーティングプログラムの記述方法は、Laravelのバージョン、フロントエンド開発の選択により異なります。 今回はLaravel9の標準的な「web.php」で、トップページのルーティングが設定されています。

web.php
<?php
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

ルーティングの確認

artisaonコマンドで、ルーティングのリストが確認できます。

php artisan route:list

ルーティングの基本

Routeクラス

ルーティングは、Routeクラスを元に「HTTPメソッド」「URLパターン」「処理」をセットで記述します。

Route::HTTPメソッド(URLパターン, 処理);

無名関数

処理を無名関数で記述する場合です。

Route::HTTPメソッド(URLパターン, function() {
    return 処理;
});

Controller + Action

処理を「Controller + Action」で記述する場合です。

Route::HTTPメソッド(URLパターン, [Controller::class, Action]);

HTTPメソッド

「HTTPメソッド」は、主に「GET」「POST」を利用しますが、意図的に「PUT」や「DELETE」などを利用可能です。

HTTPメソッド ルーティング
GET Route::get() 通常リンク、読み込み、検索など
POST Route::post() データ作成・更新・削除など
PUT Route:: put() データ更新
DELETE Route:: delete() データ削除
PATCH Route:: patch() 部分更新
OPTIONS Route:: options() その他

Facade(ファサード)

Facadeとは?

「Route」クラスはFacade(ファサード)というデザインパターンで動作します。Facadeは、簡単にいうとクラスメソッドやメンバーを静的アクセスできるようにした仕組みです。

LaravelのFacade

Laravelでよく利用する機能をFacadeパターンでコーディングすることが多々あります。プログラムが肥大化したときに役割を分担することで、開発スピードを上げたり、管理しやすい設計になります。

ルーティング処理

ルーティングの作成

ルーティングを定義して、ブラウザに文字を表示してみましょう。

ルーティングの概要

URI HTTPメソッド 表示文字
/about GET this is about page

ルーティングがない場合

http://localhost:8000/about にアクセスすると、ルーティングされていないので「Not Found」ページが表示されます。

ルーティングの定義

「routes/web.php」を開きルーティング「/about」を定義します。表示文字は「return」で返します。

Route::get('/about', function() {
    return 'this is about page';
});

「VSCode」のSnippet

「VSCode」では「routeget」のようなSnippetで、「Route::get()」をコードアシスタントできます。

ブラウザで確認

ルーティングを定義したら、ブラウザにアクセスして文字が表示されるか確認しましょう。

http://localhost:8000/about

パラメータ取得

URLパラメータ

LaravelのRoutingではURLパラメータを取得でき、パラメータは {パラメータ名} で設定します。

GETのパラメータ

Route::get('/about/{パラメータ名}', 処理);

POSTのパラメータ

Route::post('/about/{パラメータ名}', 処理);

ルーティング定義

パラメータ定義

GETリクエストで「item/」にパラメータを取得するルーティングです。パラメータ名が「id」の場合 {id} で記述します。

Route::get('/item/{id}',  処理);
無名関数で取得

リクエストされたパラメータは、無名関数の引数で取得できます。ルーティングの {id} の部分がURLの任意な値に対応します。

Route::get('/item/{id}', function ($id) {
    $message = "Item id is {$id}";
    return $message;
});

ブラウザで確認

URLの「item/」以降の値を変えて表示文字を確認してみましょう。

namespace

namespace(ネームスペース)とは

PHPでは同じファイルやクラスが存在しても衝突しないように動作させるnamespaceという仕組みがあります。

Laravel の namespace

Laravelでは非常にたくさんのクラスファイルで構成されているため、namespaceでクラスファイルを利用するのが一般的です。

namespace修飾子

namespaceの定義は、namespace修飾子を記述します。

namespace ネームスペースのパス;

namespaceはファイルパスではない

namespaceの自分のファイルのパスにあわせて設定しますが、実際のフォルダパスではないことに注意しましょう。またフォルダは「 \ 」(バックスラッシュ)で区切ります。

namespace「Facades」

Laravelでよく利用される「Facades」の namespace です。

namespace Illuminate\Support\Facades;
  • 実際のファイルパス:vender/laravel/framework/src/Illuminate/Support/Facades

クラスファイルの利用

use修飾子

クラスファイルの namespace での利用は use修飾子でクラスファイルのパスを指定します。

use クラスファイルのパス;

「web.php」の「Route」クラスを利用する例です。

use Illuminate\Support\Facades\Route;

パスは通常は自分のファイルを配置したフォルダを基本に記述します。

  • 実際のファイルパス:vender/laravel/framework/src/Illuminate/Support/Facades/Route.php

Requestクラス

Requestクラスとは

「Request」クラスはHTTPリクエストに関するクラスで、リクエスト情報や送信データを取得できます。

Requestクラスの利用方法

「web.php」でRequestオブジェクトを利用しますが、Laravelの「Request」クラスが複数あるので「Illuminate\Http\Request」を指定します。「Request」を入力して「Illuminate\Http\Request」を選択します。

これで、Requestオブジェクトが利用できます。

web.php
use Illuminate\Http\Request;

ルーティング

GETリクエスト「/item」でルーティングします。

web.php
Route::get('/item', function () {

});

Requestデータ

Closures(コールバック関数)の引数でRequestオブジェクトを指定すると、リクエストデータを取得できます。

web.php
Route::get('/item', function (Request $request) {

});

デバッグ関数

dd()

Laravelのデバッグ関数に dd() があり、オブジェクトの中身を表示して強制終了します。

dd(オブジェクト);

Requestオブジェクトのデバッグ

Requestオブジェクトをデバッグしてみましょう。

Route::get('/search', function (Request $request) {
    dd($request);
});

ブラウザでアクセス

「/item?page=1」でアクセスして確認します。

パラメータ確認

「query」を開くと「keyword=tokyo」のパラメータが格納されています。

パラメータの取得

パラメータ取得は、Reuqestオブジェクトのパラメータ名で指定します。

$request->パラメータ名

pageパラメータ取得

Reuqestオブジェクトから「page」パラメータを取得して、メッセージを表示してみましょう。

Route::get('/search', function (Request $request) {
    $message = "Page is {$request->keyword}";
    return $message;
});

ブラウザで確認

「page」パラメータの任意の値でメッセージが変わりました。

Laravel超入門