1.10. コンパイラ

QiqテンプレートはネイティブのPHPを使用しますが、{{ ... }} シンタックスシュガーはコンパイルプロセスが必要です。

  • コンパイル済みテンプレートがキャッシュディレクトリに既に存在し、ソーステンプレートファイルよりも新しい場合、QiqCompiler は既存のコンパイル済みテンプレートを返します。そうでない場合...

  • QiqCompiler はソーステンプレートファイルを読み込み、正規表現を使用して {{ ... }} タグを分割し、QiqToken オブジェクトとして保持します。

  • 次に、QiqCompiler は各 QiqToken を呼び出して {{ ... }} タグのPHPコード置換を取得し、すべての部分を順番に再構築します。

  • コンパイル済みテンプレートはコンパイラのキャッシュディレクトリに保存されます。同じソーステンプレートは再度コンパイルされません - 少なくとも、再保存されてタイムスタンプが更新され、コンパイル済みバージョンよりも新しくなるまでは。

1.10.1. キャッシュパス

QiqCompiler のキャッシュパスは、デフォルトで sys_get_temp_dir() ディレクトリに /qiq を追加したものですが、Template::new() で任意のパスを指定できます:

$template = Template::new(
    cachePath: '/path/to/qiqcache/'
);

QiqCompiler は、ソーステンプレートファイルのフルパスを使用してコンパイル済みテンプレートをキャッシュに保存します。例えば、キャッシュパスが /private/tmp で、ソーステンプレートファイルが /www/site/resources/templates/foo.php にある場合、コンパイル済みテンプレートファイルは次の場所にキャッシュされます:

/private/tmp/www/site/resources/templates/foo.php

コンパイルエラーが発生した場合、キャッシュパスの一部としてソーステンプレートの完全なパスがあると、元のテンプレートを見つけるのに役立ちます。

1.10.2. キャッシュのクリア

キャッシュをクリアするには、Template 内の Compiler を取得し、その clear() メソッドを呼び出します。

$template->getCompiler()->clear();

1.10.3. コンパイラの無効化

Qiq構文を使用せず、テンプレートファイルでPHPのみを使用することが絶対に確実な場合は、$cachePath を false に設定して Template を作成できます:

$template = Template::new(
    cachePath: false
);

これにより、Template はテンプレートファイルを全くコンパイルまたはキャッシュしない NonCompiler を使用するようになります。