Gravのライフサイクル
[!訳注]
このページの内容は、色分けが無いととても見にくいのですが、追加 CSS の処理がうまくいかず、現状このような見た目になっています。基本的には、 翻訳元のページ を参照してください。
プラグインから Grav を拡張するベストな方法を理解するために、 Grav のプロセスを知っておくことはしばしば有益です。
Grav のライフサイクルは、以下のとおりです:
index.php
- PHP バージョンをチェックし、 7.1.3 以上で実行されていることを確認
- Class loader 初期化
- Grav インスタンスを取得
Grav.php
- インスタンスが存在しないので、
load()呼び出し - 追加:
loader - 追加し、初期化:
debugger - 追加:
grav(廃止) - 登録: Default Services
- 登録: Service Providers
- Accounts Service Provider
- 追加:
permissions(1.7) - 追加:
accounts(1.6) - 追加:
user_groups(1.7) - 追加:
users(deprecated)
- 追加:
- Assets Service Provider
- 追加:
assets
- 追加:
- Backups Service Provider
- 追加:
backups(1.6)
- 追加:
- Config Service Provider
- 追加:
setup - 追加:
blueprints - 追加:
config - 追加:
languages - 追加:
language
- 追加:
- Error Service Provider
- 追加:
error
- 追加:
- Filesystem Service Provider
- 追加:
filesystem
- 追加:
- Flex Service Provider
- 追加:
flex(1.7)
- 追加:
- Inflector Service Provider
- 追加:
inflector
- 追加:
- Logger Service Provider
- 追加:
log
- 追加:
- 出力: Service Provider
- 追加:
output
- 追加:
- Pages Service Provider
- 追加:
pages - 追加:
page
- 追加:
- Request Service Provider
- 追加:
request(1.7)
- 追加:
- Scheduler Service Provider
- 追加:
scheduler(1.6)
- 追加:
- Session Service Provider
- 追加:
session - 追加:
messages
- 追加:
- Streams Service Provider
- 追加:
locator - 追加:
streams
- 追加:
- Task Service Provider
- 追加:
task - 追加:
action
- 追加:
- Simple Service Providers
- 追加:
browser - 追加:
cache - 追加:
events - 追加:
exif - 追加:
plugins - 追加:
taxonomy - 追加:
themes - 追加:
twig - 追加:
uri
- 追加:
- Accounts Service Provider
- インスタンスが存在しないので、
Grav::process()を呼び出すGrav.php
- 実行: 初期化: Processor
- Configuration
- 初期化:
$grav['config'] - 初期化:
$grav['plugins']
- 初期化:
- Logger
- 初期化:
$grav['log']
- 初期化:
- Errors
- 初期化:
$grav['errors'] - 登録: PHP error handlers
- 初期化:
- Debugger
- 初期化:
$grav['debugger']
- 初期化:
- Handle debugger requests
- output buffering を開始
- Localization
- ロケールとタイムゾーンを設定
- Plugins
- 初期化:
$grav['plugins']
- 初期化:
- Pages
- 初期化:
$grav['pages']
- 初期化:
- Uri
- 初期化:
$grav['uri'] - 追加:
$grav['base_url_absolute'] - 追加:
$grav['base_url_relative'] - 追加:
$grav['base_url']
- 初期化:
- リダイレクト制御
- リダイレクト時
system.pages.redirect_trailing_slashが true であれば最後のスラッシュを URL に追加
- リダイレクト時
- Accounts
- 初期化:
$grav['accounts']
- 初期化:
- Session
- 初期化:
$grav['session']もしsystem.session.initializeがtrueの場合
- 初期化:
- Configuration
- 実行: Plugins Processor
- 発火: onPluginsInitialized イベント
- 実行: Themes Processor
- 初期化:
$grav['themes'] - 発火: onThemeInitialized イベント
- 初期化:
- 実行: Request Processor
- 初期化:
$grav['request'] - 発火: onRequestHandlerInit イベント。以下も一緒に [request, handler]
- もし response がイベント内に設定されていれば、それ以上の処理を止め、 response を出力
- 初期化:
- 実行: Tasks Processor
- もし request に次の属性があるとき (controller.class) 及び (task または action):
- 実行: そのコントローラー
- もし
NotFoundException: continue (task と action をチェックする) - もし response code 418: continue (task と action を無視する)
- それ以外の場合: それ以上の処理を止め、 response を出力
- もし task:
- 発火: onTask イベント
- 発火: onTask.[TASK] イベント
- もし action:
- 発火: onAction イベント
- 発火: onAction.[ACTION] イベント
- もし request に次の属性があるとき (controller.class) 及び (task または action):
- 実行: Backups Processor
- 初期化:
$grav['backups'] - 発火: onBackupsInitialized イベント
- 初期化:
- 実行: Scheduler Processor
- 初期化:
$grav['scheduler'] - 発火: onSchedulerInitialized イベント
- 初期化:
- 実行: Assets Processor
- 初期化:
$grav['assets'] - 発火: onAssetsInitialized イベント
- 初期化:
- 実行: Twig Processor
- 初期化:
$grav['twig']Twig.php
- Twig テンプレートパスを config 設定をもとに設定
- もし利用可能であれば言語テンプレートを制御
- 発火: onTwigTemplatePaths イベント
- 発火: onTwigLoader イベント
- Twig config 及び loader chain を読み込み
- 発火: onTwigInitialized イベント
- Twig extensions を読み込み
- 発火: onTwigExtensions イベント
- 標準 Twig 変数 (config, uri, taxonomy, assets, browser, etc) を設定
- 初期化:
- 実行: Pages Processor
- 初期化:
$grav['pages']Pages.php
- 呼び出し:
buildPages() - (Flex Pages の場合、少しロジックが違いますが、考え方は同じです)
- cache が good かチェック:
- もし cache が good load pages date from
- もし cache is not good
recurse()を呼び出す recurse()のとき発火: onBuildPagesInitialized イベント- もし
.mdファイルが見つかったとき:Page.php
- 呼び出し:
init()ファイルの詳細を読み込む - 以下を設定:
filePath,modified,id - 呼び出し:
header()header の変数を初期化する - 呼び出し:
slug()URL スラッグを設定する - 呼び出し:
visible()変数状態を設定する - 設定:
modularTwig()フォルダ名が_で始まるかどうかを基にしたステータス
- 呼び出し:
- 発火: onPageProcessed イベント
- もし
folderが見つかったらフォルダ内をrecurse() - 発火: onFolderProcessed イベント
- 呼び出し:
buildRoutes() - すべてのページに対して初期化:
taxonomy - 検索スピードアップのため
routeテーブルを作成
- 呼び出し:
- 発火: onPagesInitialized イベント with [pages]
- 発火: onPageInitialized イベント with [page]
- もし page の routable が false:
- 発火: onPageNotFound イベント with [page]
- もし task:
- 発火: onPageTask イベント with [task, page]
- 発火: onPageTask.[TASK] イベント with [task, page]
- もし action:
- 発火: onPageAction イベント with [action, page]
- 発火: onPageAction.[ACTION] イベント with [action, page]
- 初期化:
- 実行: Debugger Assets Processor
- Debugbar のときのみ: 追加: デバッグ用 CSS/JS を assets に
- 実行: レンダリング: Processor
- 初期化:
$grav['output'] - もし
outputinstanceofResponseInterface:- それ以上の処理を止め、 response を出力
- そうでない時:
- Twig の
processSite()メソッドでそのページをレンダリングTwig.php
- 発火: onTwigSiteVariables イベント
- ページの出力を取得
- 発火: onTwigPageVariables, 及び、各モジュラーサブページへ呼び出し
- もしページが見つからない、もしくはルーティング不可の場合、まず onPageFallBackUrl イベントを発火。メディアアセットについてはフォールバックがあるか確認し、無ければ onPageNotFound を発火
- Twig オブジェクトにすべての Twig 変数を設定
- テンプレート名を file/header/extension 情報をもとに設定
- 呼び出し:
render()メソッド - 結果の HTML を返す
- 発火: onOutputGenerated イベント
- 出力バッファに出力を echo
- 発火: onOutputRendered イベント
- Response オブジェクトを作成
- それ以上の処理を止め、 response を出力
- Twig の
- 初期化:
- 発火: onPageHeaders イベント ページヘッダーを処理する
- 出力: HTTP ヘッダと HTTP ボディ
- レンダリング: debugger (有効化されているとき)
- シャットダウン
- session を閉じる
- クライアントとの接続を閉じる
- 発火: onShutdown イベント
- 実行: 初期化: Processor
呼び出される content() メソッドがあるページではいつでも、以下のライフサイクルが起こります:
Page.php
- もし content がキャッシュ されていない 場合:
- 発火: onPageContentRaw イベント
- マークダウンと Twig の設定をもとにページを処理。 発火: onMarkdownInitialized イベント
- 発火: onPageContentProcessed イベント
- 発火: onPageContent イベント