/bonvhp/webapp2/delight_im       [後へ]   [目次へ]   [次へ] ~ [] ~

delight_im:共通設定

概要説明

各WEBアプリの PHPコードにインクルードする共通設定用のファイルです。
役割は、
1. ユーザー認証用のオブジェクトを生成
2. ログイン済かどうかをチェックする関数を用意
になります。

コードの一例

コードの一例を示します。
<?php /* * ユーザー認証 */ session_start(); // ① require_once __DIR__ . '/../vendor/autoload.php'; // ② use Delight\Auth\Auth; // ⑤ // データベースのオブジェクトを生成 // ③ define("SERVER_NAME", 'localhost'); // サーバーの名前 (本番サーバーでは名前を変えること) require_once("rdb.class.php"); $o_Rdb = Rdb::getInstance(); $db = $o_Rdb->getDb(); // ライブラリの警告抑制 // ⑦ set_error_handler(function ($errno, $errstr, $errfile, $errline) { if ($errno === E_DEPRECATED && str_contains($errfile, "vendor\\delight-im\\")) { return true; } return false; }); // ユーザー認証用のオブジェクト生成 // ➃ $auth = new Auth($db); // 以降は通常のエラーハンドラに戻す // ⑦ restore_error_handler(); // ログイン済かどうかチェック関数 // ⑥ function require_login(): void { global $auth; if (! $auth->isLoggedIn()) { header('Location: ./../class/login.php'); exit; } } ?>
以降、各部分毎に分けて説明します。

① セッション

WEBの全ページでログイン状態を保持するために、セッションを使用します。
$_SESSION['user_id'] のように参照します。
session_start でセッションを開始します。

② autoload.php

Composer 配下の各ライブラリについて、
コード内でクラスを指定すると、必要なファイルを自動で読み込んでくれます。

③ データベース・オブジェクト

"users" などのテーブルに接続するための、
データベース・オブジェクトを生成します。
$db でアクセスできるようにしています。
# この部分は認証とは別の話なので、詳細は割愛します。

➃ ユーザー認証オブジェクト

new Auth($db) で
ユーザー認証オブジェクトを生成します。
$auth でアクセスできるようにしています。

⑤ パスの短縮

上で、new Auth($db) と書いていました。
これは、
use Delight\Auth\Auth;
で、どの Auth を使用するかを予め指定していたからです。

use を書かない場合は、
new \Delight\Auth\Auth($db)
と、フルパスで書かないといけなくなります。

⑥ ログイン済みか

require_login の
$auth->isLoggedIn() で、
現在ログイン済みかをチェックします。
ログイン済みなら true、そうでなければ false を返します。
false なら、login.php (ログイン画面) に強制遷移します。

⑦ Deprecated エラー回避

PHP8 以降、バージョンが上がるにつれて、エラーチェックが厳しくなっています。
delight-im でも、素で使用すると、
Deprecated: Delight\Db\PdoDatabase::__construct(): Implicitly marking parameter $pdoInstance as nullable is deprecated,
といった警告が大量に出ます。 本番環境なら E_DEPRECATED でエラーを出さないようにすればいいですが、 開発中では細かなエラーもチェックしたい。 そこで、 set_error_handler を使って、 エラー番号が E_DEPRECATEDで、エラー文字列に "vendor\\delight-im\\" が含まれていればエラーをスキップします。 delight-im オブジェクトを生成した後は、 restore_error_handler で元に戻しておきます。 set_error_handler すると、現在の状態をスタックに保存してから設定を変更します。 restore_error_handler はスタックに保存した設定を取り出して元に戻します。 よって、自前コードで元の設定を覚えておく必要はありません。 スタックを使用するので、 set_error_handler を複数使用する場合は、 restore_error_handler の置き場所や数に注意しましょう。



/bonvhp/webapp2/delight_im       [後へ]   [目次へ]   [次へ]