Twig
in package
Table of Contents
Properties
- $loader : CustomLoader|null
- $path : string
- $theme : string
- $twig : Environment|null
- $needsRebuild : bool
- pending リストに変更があり次回 render 時に Environment を再構築すべきか。
- $pendingExtensions : array<class-string, AbstractExtension>
- 拡張側から登録された Extension (Environment 構築時に flush)。 同型クラスの二重登録は最後の登録を採用する。
-
$pendingFilters
: array<string, array{name: string, callable: callable, options: array
}> - 拡張側から登録された Filter (Environment 構築時に flush)。 Filter 名をキーにして同名の二重登録を最後の登録で束ねる。 extendsTwig Hook は Environment 再構築のたびに再発火し得るため、 同名 Filter が複数積まれて addFilter が LogicException を投げるのを防ぐ。
-
$pendingFunctions
: array<string, array{name: string, callable: callable, options: array
}> - 拡張側から登録された Function (Environment 構築時に flush)。 Function 名をキーにして同名の二重登録を最後の登録で束ねる ($pendingFilters と同様)。
- $pendingTemplatePaths : array<string, array<int, string>>
- 拡張側から登録されたテンプレートディレクトリ (Environment 構築時に flush)。
Methods
- addExtension() : void
- 拡張を追加 (既存 API)。
- addFunction() : void
- Functionを追加 (既存 API)。
- addTemplatePath() : void
- 拡張側がテンプレートディレクトリを名前空間付きで登録するための窓口。 Environment 構築前なら pending に積み、構築済みなら即時反映する。
- clearCache() : void
- Twigのキャッシュをクリア
- load() : void
- twigテンプレートをロード
- registerExtension() : void
- 拡張側が register する用の Extension 登録窓口。
- registerFilter() : void
- 拡張側が register する用の Filter 登録窓口。
- registerFunction() : void
- 拡張側が register する用の Function 登録窓口。
- render() : string
- レンダリング (既存 API)。
- renderTemplate() : string
- テンプレ名と変数を渡してレンダリングする。
- attachBuiltInExtensions() : void
- 組込みの Twig 拡張を Environment に attach する。
- bootstrapEnvironment() : void
- Environment を構築する。
- dispatchExtendsTwigHook() : void
- extendsTwig Hook を発火する。
- flushPending() : void
- pending に積まれた登録物を Environment / Loader に一括 attach する。
- resolveThemeDirectories() : array<int, string>
- テーマ名からテンプレートディレクトリリストを解決する。
Properties
$loader
protected
CustomLoader|null
$loader
$path
protected
string
$path
= ''
$theme
protected
string
$theme
= ''
$twig
protected
Environment|null
$twig
$needsRebuild
pending リストに変更があり次回 render 時に Environment を再構築すべきか。
private
bool
$needsRebuild
= false
Twig\Environment は最初の render で ExtensionSet が initialized になり、 それ以降は addFilter / addFunction / addExtension が例外で弾かれる。 このフラグが立っているときは render の冒頭で bootstrap をやり直す。
$pendingExtensions
拡張側から登録された Extension (Environment 構築時に flush)。 同型クラスの二重登録は最後の登録を採用する。
private
array<class-string, AbstractExtension>
$pendingExtensions
= []
$pendingFilters
拡張側から登録された Filter (Environment 構築時に flush)。 Filter 名をキーにして同名の二重登録を最後の登録で束ねる。 extendsTwig Hook は Environment 再構築のたびに再発火し得るため、 同名 Filter が複数積まれて addFilter が LogicException を投げるのを防ぐ。
private
array<string, array{name: string, callable: callable, options: array}>
$pendingFilters
= []
$pendingFunctions
拡張側から登録された Function (Environment 構築時に flush)。 Function 名をキーにして同名の二重登録を最後の登録で束ねる ($pendingFilters と同様)。
private
array<string, array{name: string, callable: callable, options: array}>
$pendingFunctions
= []
$pendingTemplatePaths
拡張側から登録されたテンプレートディレクトリ (Environment 構築時に flush)。
private
array<string, array<int, string>>
$pendingTemplatePaths
= []
namespace => list
Methods
addExtension()
拡張を追加 (既存 API)。
public
addExtension(AbstractExtension $extension) : void
互換のため Environment 構築前 (load 未実行) の呼び出しも受け付け、 pending に積んで構築時に attach する。
Parameters
- $extension : AbstractExtension
Tags
addFunction()
Functionを追加 (既存 API)。
public
addFunction(string $name, callable $function) : void
互換のため Environment 構築前の呼び出しも受け付け、pending に積む。
Parameters
- $name : string
- $function : callable
Tags
addTemplatePath()
拡張側がテンプレートディレクトリを名前空間付きで登録するための窓口。 Environment 構築前なら pending に積み、構築済みなら即時反映する。
public
addTemplatePath(string $dir[, string|null $namespace = null ]) : void
Parameters
- $dir : string
- $namespace : string|null = null
-
null の場合は MAIN_NAMESPACE
clearCache()
Twigのキャッシュをクリア
public
clearCache() : void
load()
twigテンプレートをロード
public
load(string $path, string $theme) : void
Parameters
- $path : string
- $theme : string
Tags
registerExtension()
拡張側が register する用の Extension 登録窓口。
public
registerExtension(AbstractExtension $extension) : void
同型クラスの二重登録は最後の登録を採用する (Twig\Environment::addExtension は 同型クラスを二度 attach すると例外を投げるため)。
Parameters
- $extension : AbstractExtension
registerFilter()
拡張側が register する用の Filter 登録窓口。
public
registerFilter(string $name, callable $callable[, array<string, mixed> $options = [] ]) : void
Environment 未構築なら pending に積み、構築済みなら即時 addFilter する。
Parameters
- $name : string
- $callable : callable
- $options : array<string, mixed> = []
-
Twig\TwigFilter のコンストラクタ第 3 引数と同じ
registerFunction()
拡張側が register する用の Function 登録窓口。
public
registerFunction(string $name, callable $callable[, array<string, mixed> $options = [] ]) : void
Parameters
- $name : string
- $callable : callable
- $options : array<string, mixed> = []
-
Twig\TwigFunction のコンストラクタ第 3 引数と同じ
render()
レンダリング (既存 API)。
public
render() : string
Return values
stringrenderTemplate()
テンプレ名と変数を渡してレンダリングする。
public
renderTemplate(string $name[, array<string, mixed> $context = [] ]) : string
Environment 未構築なら最低限の構築を行う。テーマは config('theme') を採用し、 解決できなければ system のみを fallback とする。
Parameters
- $name : string
- $context : array<string, mixed> = []
Return values
stringattachBuiltInExtensions()
組込みの Twig 拡張を Environment に attach する。
protected
attachBuiltInExtensions(Environment $twig, array<int, string> $defaultFilters) : void
拡張ポイントとして protected で切り出している。テストサブクラスから 空実装で上書きすることで、ACMS の完全初期化を必要としない単体テストが書ける。 本番コードの呼び出し経路では従来通り常に組込み拡張がすべて attach される。
Parameters
- $twig : Environment
- $defaultFilters : array<int, string>
-
Twig 標準 Filter 名一覧 (AcmsExtension が利用)
bootstrapEnvironment()
Environment を構築する。
protected
bootstrapEnvironment(string $theme) : void
テーマ → system の順でテンプレートディレクトリを積み、組込み拡張・Hook 拡張・ pending のテンプレートパス / Filter / Function / Extension を flush する。
Parameters
- $theme : string
dispatchExtendsTwigHook()
extendsTwig Hook を発火する。
protected
dispatchExtendsTwigHook() : void
通常運用では HOOK_ENABLE が無効化されているとき (config.user.php で 0 など) に Hook を呼ばないようガードする。テストサブクラスから上書きすることで、Hook 発火を 強制できる単体テスト経路も確保する。
flushPending()
pending に積まれた登録物を Environment / Loader に一括 attach する。
private
flushPending() : void
resolveThemeDirectories()
テーマ名からテンプレートディレクトリリストを解決する。
private
resolveThemeDirectories(string $theme) : array<int, string>
親テーマ表記 ({子}@{親}) を再帰的に展開し、最後に system を必ず加える。 Twig\Loader\FilesystemLoader は存在しないパスの追加で例外を投げるため、 実在するディレクトリのみに絞り込む。
Parameters
- $theme : string