a-blog cms PHP API Reference

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

$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
throws
LogicException

addFunction()

Functionを追加 (既存 API)。

public addFunction(string $name, callable $function) : void

互換のため Environment 構築前の呼び出しも受け付け、pending に積む。

Parameters
$name : string
$function : callable
Tags
throws
LogicException

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
throws
LogicException

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
string

renderTemplate()

テンプレ名と変数を渡してレンダリングする。

public renderTemplate(string $name[, array<string, mixed> $context = [] ]) : string

Environment 未構築なら最低限の構築を行う。テーマは config('theme') を採用し、 解決できなければ system のみを fallback とする。

Parameters
$name : string
$context : array<string, mixed> = []
Return values
string

attachBuiltInExtensions()

組込みの 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
Return values
array<int, string>

        
On this page

Search results