1.9. コンパイラ

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

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

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

  • QiqCompilerは次にそれぞれのQiqTokenを呼び出して、{{ ... }}に対応する PHP コードの置換を取得します。タグに対応する PHPコードを取得し、すべてのパーツを順番に組み立て直します。

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

1.9.1. キャッシュパス

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

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

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

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

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

1.9.2. キャッシュのクリア

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

$tpl->getTemplateLocator()->clear();