設定

_Global

グローバルな設定値はすべて、BaseGlobal を継承した _Global クラスの static プロパティです。

<?php
// application/_Global.php
use _Flexagon\Base\BaseGlobal;

class _Global extends BaseGlobal {
    // アプリケーション固有のグローバル値をここに追加します
    public static ?\Session\SessionUserModel $SESSION_USER_MODEL = null;
}

主な設定項目は次のとおりです。

プロパティ デフォルト 説明
$SITE_TITLE 'Flexagon' サイトのタイトル
$TIMEZONE 'Asia/Seoul' date_default_timezone_set() に渡されます
$DATA_SOURCES [] データソースのマップ(後述)
$DATA_SOURCE_ID 'default' デフォルトのデータソース ID
$USE_COMPOSER true vendor/autoload.php を自動で読み込みます
$USE_OUTPUT_BUFFER true リクエスト全体を ob_start() で囲みます
$DB_STATEMENT_CACHE_SIZE 64 接続ごとにキャッシュするプリペアドステートメントの数。0 の場合は毎回 prepare します
$DB_CONNECT_FAILURE_FATAL true DB 接続に失敗したとき、(DAO のコンストラクタから)_Flexagon\DB\ConnectionException をスローします。false の場合、connect() は false を返します
$ENABLE_EXTENSION_PHP false true の場合、URL に .php を明示的に含める必要があります
$USE_AUTO_CREATED_AT_TIMESTAMP true @db_auto_timestamp insert による自動タイムスタンプ
$USE_AUTO_UPDATED_AT_TIMESTAMP true @db_auto_timestamp update による自動タイムスタンプ
$RUNNING_MODE FLEXAGON_CONST::RUNNING_MODE_PRODUCTION 実行モード。フレームワーク自体はこの値を解釈しません。アプリケーション側で分岐に利用できます
$DEBUG_ON false アプリケーションで利用するデバッグフラグ
$DEBUG_QUERY_BREAKPOINT false 各クエリの実行後に Mysql::debugQueryAfter() を呼び出します(デバッガのブレークポイント用)
$SITE_CONFIG['web']['header'] — すべてのレスポンスに追加する HTTP ヘッダー
$SESSION_AUTO_START false ブートストラップ時にセッションを自動で復元します
$SESSION_NAME 'session_data' セッション Cookie の名前
$SESSION_DOMAIN '' Cookie のドメイン(.example.com)
$SESSION_COOKIE_SECURE null Cookie の Secure フラグ。null の場合は HTTPS リクエストで自動的に有効になります
$SESSION_COOKIE_HTTPONLY true Cookie の HttpOnly フラグ
$SESSION_COOKIE_SAMESITE 'Lax' 'Lax'・'Strict'・'None'。'None' の場合は Secure が自動的に有効になります
$SESSION_MODEL_CLASSES [] セッション Cookie に格納できるクラス。空の場合は BaseModel の継承のみを確認します
$SESSION_TIMEOUT_SECONDS 86400 セッションの有効期間(秒)
$SESSION_REQUIRE_EXPIRY false exp を持たない旧形式の Cookie を拒否します。移行期間が終わったら true に設定してください
$SESSION_NOT_BEFORE 0 このタイムスタンプより前に発行されたセッションをすべて無効にします(ステートレスな強制ログアウト)
$SESSION_ENCRYPTION_STRING '' セッションの暗号化キー(10 文字以上)
$CLASS_PROPERTY_ENCRYPTION_PASSPHRASE '' @encrypt プロパティの暗号化キー(10 文字以上)

データソース

new DataSourceModel(
    string $host,
    int    $port,
    string $username,
    string $password,
    string $dbName,
    ?string $charset = 'utf8mb4',
    ?bool   $usePrepareStatement = true,
    array   $pdoOptions = []
);

複数のデータソースを登録できます。

_Global::$DATA_SOURCES['default']   = new DataSourceModel('db-master', 3306, 'app', '****', 'service');
_Global::$DATA_SOURCES['analytics'] = new DataSourceModel('db-replica', 3306, 'ro',  '****', 'stats');

各データソースには sha1(username@host/dbName) にもとづく一意の ID が割り当てられ、DataSourceManager はその ID 単位で接続を再利用します。そのため、同じデータベースを指す複数の DAO は、リクエスト内で 1 つの接続を共有します。

pdoOptions はそのまま new PDO() に渡されます。TLS やタイムアウトなど、フレームワークが設定しない値はここで指定します。ドライバーが依存するオプション(エラーモード、フェッチモード、エミュレートされたプリペア、接続の文字セット)はドライバー側の設定が優先されます。

// TLS が必須の MySQL(RDS、Azure、PlanetScale など)
_Global::$DATA_SOURCES['default'] = new DataSourceModel(
    Env::get('DB_HOST'), Env::int('DB_PORT', 3306), Env::get('DB_USER'), Env::get('DB_PASSWORD'), Env::get('DB_NAME'),
    pdoOptions: [PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/rds-ca.pem'],
);

SSL オプションを指定しない場合、サーバーが TLS を提供していても MySQL は平文で接続します。また、TLS を必須とするサーバーは接続を拒否します。CA を指定すると、証明書とホスト名が検証されます。 PostgreSQL のデフォルトは sslmode=prefer です。サーバーが TLS を提供していれば TLS を使いますが、証明書は検証されません。検証するには、環境変数 PGSSLMODE=verify-full と PGSSLROOTCERT=/path/ca.pem を設定してください(libpq が読み込みます)。

ステージ別の設定

ステージごとの設定は application/_Config/<stage>/_Config.php に配置し、CLI では runtimeStage 引数で選択します。

php script/batch.php runtimeStage=production

デフォルトのステージディレクトリは alpha、beta、production です。同じ名前のターゲット(--target production など)でビルドした Docker イメージには、そのステージディレクトリのファイルが application/ にコピーされます(Docker を参照)。コンテナを使わずにデプロイする場合は、ant production(または alpha、beta)を実行すると、サーバーに配置する内容が build/deploy/<stage> にビルドされます。シークレットや開発用ファイルは除外され、ステージのファイルが上書きコピーされ、vendor/ は composer.lock から --no-dev でインストールされます。ステージの適用方法や、Env を使ってシークレットを分離する方法については、application/_Config/README.md にまとめられています。