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']
- もし
output
instanceofResponseInterface
:- それ以上の処理を止め、 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 イベント