CLI スクリプト

バッチジョブは script/ ディレクトリに配置します。

<?php
// script/cleanup.php
require_once '__flexagon.php';

$deleted = (new \ExampleUser\UserDAO())->deleteExpired();
echo "Deleted: {$deleted} rows\n";
php script/cleanup.php runtimeStage=production days=30

key=value 形式の引数は、$_PARAMS と $_REQUEST の両方に解析されます。runtimeStage は予約語で、読み込む設定ディレクトリを選択します。

CLI から実行すると、FLEXAGON_ENV::$_RUNTIME_ENV は RUNTIME_ENV_SCRIPT に設定され、セッション、ルーティング、出力バッファリングを含む Web リクエストのパイプライン全体がスキップされます。

フレームワーク CLI

フレームワーク自体は 2 つのコマンドを提供しています。

php script/flexagon.php init [--path=DIR] [--force]
php script/flexagon.php check [--path=DIR]
実行方法 対応するインストール形態
php script/flexagon.php すべて(Composer・PHAR・ソース)
php vendor/bin/flexagon Composer によるインストール

PHAR は phar://... 形式のスクリプトパスとして PHP CLI に渡すことができないため、script/flexagon.php がエントリーポイントとして機能します。PHAR には init 用のテンプレートが含まれていないため、このインストール形態では check のみ利用できます。

init

プロジェクト構造を構成する 34 個のファイルを作成します。composer create-project flexagon/skeleton で始めた場合、これらのファイルはすでに存在します。このコマンドは主に、既存のプロジェクトに composer require で flexagon/framework を追加する場合 に役立ちます。

既存のファイルには手を加えません。 アップグレード後に実行して、新たに追加された構造ファイルだけを追加することもできます。

create   script/flexagon.php
keep     public/index.php
1 created, 22 kept, 0 failed

既存のファイルを上書きする必要がある場合は --force を使用してください。変更を加えたファイルはテンプレートの内容に置き換えられるため、注意が必要です。

check

プロジェクトのレイアウトとランタイム設定に矛盾がないかを確認し、問題が見つかった場合は終了コード 1 を返す ため、デプロイパイプラインに組み込むのに適しています。

項目 確認内容 結果
php 8.3 以降 エラー
ext-json · ext-openssl · ext-pdo ロード済み エラー
opcache.save_comments 有効 エラー
project layout flexagon.php · application/_Global.php · public/__flexagon.php · public/_router.php エラー
config placement _Config.php と application/ が public/ やいずれの public_* の下にも公開されていない エラー
bootstrap フレームワークが正常に起動する エラー
session key $SESSION_AUTO_START が有効な場合の $SESSION_ENCRYPTION_STRING の長さ エラー
data sources 設定済みで、テンプレートのプレースホルダーが残っていない 警告
display_errors 本番モードで有効になっている 警告
secrets placement public/ やいずれかの public_* の下にある .env.php / .env エラー
.env.php 配列を返し、git で追跡されていない エラー
settings .env.example.php にあるキーのうち未設定のもの 警告
secrets in config _Config.php に直接記述されたデータソースのパスワード 警告
.env 存在するが Flexagon では読み込まれない 警告
opcache.file_cache .env.php が存在する状態で有効になっている(コンパイルされたシークレットがディスク上に残る) 警告

以下のチェックは特に重要です。これらの問題は、本来であれば 何のエラーも出さずに失敗する ためです。

  • opcache.save_comments が無効になっていると、@encrypt、@db_auto_timestamp、@exclude_from_get_array がすべて無視されます。暗号化されるべきカラムが、例外も発生しないまま平文で保存される可能性があります。
  • _Config.php が public/ の下に配置されていると、PHP の処理が利用できない場合や設定が誤っている場合に、データベースの認証情報がそのまま配信されてしまう可能性があります。
  • データソースにデフォルトの username / dbname プレースホルダーが残っていると、接続はただ失敗します。
$ php script/flexagon.php check

  ok       php 8.3.33
  ok       ext-json
  ok       opcache.save_comments
  ok       project layout
  ok       bootstrap
  warn     data sources  default still contains template placeholders
  ok       session  auto start off
  ok       display_errors  off

  0 problem(s), 1 warning(s)