設定
_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 にまとめられています。