Installer
in package
a-blog cms の初回インストール orchestrator
「空 DB → 管理者 login 可能な状態」までを 1 呼び出しで完結させる。 既存の Web インストーラ (setup/install.php) と CLI の両方から利用できる。
処理順序:
- スキーマ作成 (DDL なのでトランザクション外)
- sequence 初期化
- 空 DB チェック (blog が存在しないこと) --- ここからトランザクション ---
- ルート blog 作成 → admin user 作成
- 関連 bin (
*@<root>) があれば、各々に対応する子 blog を作成 MultiBlogImport::run()で全 bin を一括投入 (内部で全 bin の yaml をマージ:<table>_blog_idを新 blog_id に書き換え、<table>_id重複は先勝ちで除去される。同じ ID = 1 行原則を yaml 段階で保証) --- コミット ---- 各 bin の archives / media / storage / themes を SCRIPT_DIR 配下にコピー (DB トランザクションで巻き戻せないため、コミット成功後に実行)
- キャッシュ全クリア
Step 3〜5 のいずれかで失敗するとロールバックして InstallerException を再 throw。 Step 0 (DDL) は MySQL 仕様で暗黙コミットされるためトランザクション外。Step 1/2 は 副作用が小さいため簡単のためトランザクション外に置く (繰り返し呼んでも冪等)。
Table of Contents
Properties
- $adminUserFactory : AdminUserFactory
- $blogRepository : BlogRepository
- $multiImport : MultiBlogImport
- $paths : SiteSeedPathResolver
- $schema : SchemaCreator
- $sequence : SequenceInitializer
- $siteSeeder : SiteSeeder
Methods
- __construct() : mixed
- install() : InstallerResult
- assertNoExistingBlog() : void
- createBlog() : int
- ルート/子 blog を作成し、`blog_id` を返す。
- makeDryRunSeedResult() : SiteSeedResult
- resolveBlogDomain() : string
- blog のドメインを options 優先、なければ config.server.php の DOMAIN にフォールバックする。
Properties
$adminUserFactory read-only
private
AdminUserFactory
$adminUserFactory
$blogRepository read-only
private
BlogRepository
$blogRepository
= new BlogRepository()
$multiImport read-only
private
MultiBlogImport
$multiImport
= new MultiBlogImport()
$paths read-only
private
SiteSeedPathResolver
$paths
$schema read-only
private
SchemaCreator
$schema
$sequence read-only
private
SequenceInitializer
$sequence
$siteSeeder read-only
private
SiteSeeder
$siteSeeder
Methods
__construct()
public
__construct(SequenceInitializer $sequence, AdminUserFactory $adminUserFactory, SiteSeeder $siteSeeder, SiteSeedPathResolver $paths, SchemaCreator $schema[, MultiBlogImport $multiImport = new MultiBlogImport() ][, BlogRepository $blogRepository = new BlogRepository() ]) : mixed
Parameters
- $sequence : SequenceInitializer
- $adminUserFactory : AdminUserFactory
- $siteSeeder : SiteSeeder
- $paths : SiteSeedPathResolver
- $schema : SchemaCreator
- $multiImport : MultiBlogImport = new MultiBlogImport()
- $blogRepository : BlogRepository = new BlogRepository()
install()
public
install(InstallerOptions $options[, SiteSeedLogger|null $logger = null ]) : InstallerResult
Parameters
- $options : InstallerOptions
- $logger : SiteSeedLogger|null = null
Return values
InstallerResultassertNoExistingBlog()
private
assertNoExistingBlog() : void
createBlog()
ルート/子 blog を作成し、`blog_id` を返す。
private
createBlog(int $parentBlogId, string $binName, string|null $explicitCode, string|null $explicitName, string $domain) : int
blog_code / blog_name を正規化したうえで、nested-set の予約と INSERT を BlogRepository の プリミティブ(findLastChildInParent / findBoundary / shiftLeftRightAfter / nextBlogId / insert)を 合成して行う(管理画面 ACMS_POST_Blog_Insert と同じ作法。生 SQL は BlogRepository に集約済み)。
Parameters
- $parentBlogId : int
- $binName : string
- $explicitCode : string|null
- $explicitName : string|null
- $domain : string
Return values
intmakeDryRunSeedResult()
private
makeDryRunSeedResult(InstallerOptions $options) : SiteSeedResult
Parameters
- $options : InstallerOptions
Return values
SiteSeedResultresolveBlogDomain()
blog のドメインを options 優先、なければ config.server.php の DOMAIN にフォールバックする。
private
resolveBlogDomain(InstallerOptions $options) : string
実際の解決は InstallerOptions::effectiveBlogDomain() が担う。Installer は
「フォールバック値として DOMAIN 定数を提供する」役割だけ持つ。
Web インストーラ (setup/install.php) は blogDomain: DOMAIN を明示的に渡しているが、
CLI 経由ではユーザが --blog-domain を毎回付けなくても同じ挙動になるようにここで吸収する。
Parameters
- $options : InstallerOptions