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パターンでコーディングすることが多々あります。プログラムが肥大化したときに役割を分担することで、開発スピードを上げたり、管理しやすい設計になります。

ルーティングがない場合

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

ルーティング処理

トップページ

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

ルーティングの概要

ページ URI HTTPメソッド
トップ / GET
About /about GET

ルーティングの定義

routes/web.php を開きルーティング / を修正します。

Route::get('/', function() {
    return 'Home Page';
});

ブラウザで確認

http://localhost:8000/ にアクセスして文字が表示されるか確認しましょう。

Aboutページ

/about を定義します。表示文字は「return」で返します。

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

ブラウザで確認

http://localhost:8000/about にアクセスして文字が表示されるか確認しましょう。

パラメータ取得

URLパラメータ

LaravelのルーティングのURLパラメータは、 {パラメータ名} で設定します。

GETのパラメータ

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

POSTのパラメータ

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

ルーティング定義

パラメータ定義

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

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

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

routes/web.php
Route::get('/product/{id}', function ($id) {
    $message = "Product id is {$id}";
    return $message;
});

ブラウザで確認

URLの product/xx で任意の文字をパラメーターにして確認します。

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.phpIlluminate\Http\Requestを指定します。

web.php
use Illuminate\Http\Request;

ルーティング

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

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

});

Requestデータ

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

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

});

デバッグ関数

dd()

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

dd(オブジェクト);

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

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

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

パラメータ確認

/search?page=1でアクセスすると dd() のデバッグ情報が確認できます。、パラメーターが keyword=tokyoになっています。

パラメータの取得

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

$request->パラメータ名

pageパラメータ取得

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

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

ブラウザで確認

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

Laravel超入門