QiqテンプレートはネイティブPHPを使用していますが、{{ ... }}
シンタックスシュガーは、コンパイルプロセスが必要です。
コンパイル済みテンプレートがキャッシュ・ディレクトリに既に存在し、ソース・テンプレート・ファイルより新しい場合、QiqCompilerは既に存在するコンパイル済みテンプレートを返します。そうでない場合は
QiqCompilerは、ソース・テンプレート・ファイルを読み込んで、{{ ... }}
タグを正規表現を使って分割し、QiqTokenオブジェクトとして保持します。
QiqCompilerは次にそれぞれのQiqTokenを呼び出して、{{ ... }}
に対応する PHP コードの置換を取得します。タグに対応する PHPコードを取得し、すべてのパーツを順番に組み立て直します。
コンパイルされたテンプレートは、コンパイラのキャッシュディレクトリに保存されます。同じソース・テンプレートが再びコンパイルされることはありません。 -- 少なくとも、再保存されてタイムスタンプが更新されコンパイルされたバージョンよりも新しくなるまでは。
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
コンパイルエラーが発生した場合、キャッシュパスの一部としてソーステンプレートのフルパスがあれば、元のテンプレートを見つけるのに役立ちます。
キャッシュをクリアするには、Templateの中に入ってTemplateLocatorを取得し、そのclear()
メソッドを呼び出します。
$tpl->getTemplateLocator()->clear();