HTML

HTML表現のために以下のテンプレートエンジンが利用可能です。

Twig vs Qiq

Twigは最初のリリースが2009年にされ多くのユーザーがいます。Qiqは2021年にリリースされた新しいテンプレートエンジンです。

Twigが暗黙的エスケープをデフォルトにし制御構造などをTwig独自構文にしています。それに対して、Qiqは明示的なエスケープを要求し、PHP構文が基本のテンプレートです。 Twigのコードベースは大きく機能も豊富ですがそれに対してQiqはコンパクトでシンプルです。 (冗長になりますがQiqを完全なPHP構文で記述するとIDEや静的解析フレンドリーになります。)

構文比較

PHP

<?= $var ?>
<?= htmlspecialchars($var, ENT_QUOTES|ENT_DISALLOWED, 'utf-8') ?>
<?= htmlspecialchars(helper($var, ENT_QUOTES|ENT_DISALLOWED, 'utf-8')) ?>
<?php foreach ($users => $user): ?>
 * <?= $user->name; ?>
<?php endforeach; ?>

Twig

{{ var | raw }}
{{ var }}
{{ var | helper }}
{% for user in users %}
  * {{ user.name }}
{% endfor %}

Qiq

{{% var }}
{{h $var }}
{{h helper($var) }}
{{ foreach($users => $user) }}
  * {{h $user->name }}
{{ endforeach }}

{{ var }} // 表示されない
<?php /** @var Template $this */ ?>
<?= $this->h($var) ?>

レンダラー

RenderInetrfaceにバインドされResourceObjectにインジェクトされるレンダラーがリソースの表現を生成します。リソース自身はその表現に関して無関心です。

リソース単位でインジェクトされるので、複数のテンプレートエンジンを同時に使うこともできます。

開発用のハローUI

開発時にハロー(Halo, 後光) 1 と呼ばれる開発用のUIをレンダリングされたリソースの周囲に表示することができます。ハローはリソースの状態、表現、及び適用されたインターセプターなどについての情報を提供します。また、該当するリソースクラスやリソーステンプレートがPHPStormで開かれるリンクも提供します。

ハローがリソース状態を表示

  • ハローホーム(ボーターとツール表示)
  • リソース状態
  • リソース表現
  • プロファイル
  • プロファイル

demoでハローのモックを試すことができます。

パフォーマンスモニタリング

ハローにはリソースのパフォーマンス情報も表示されます。リソースの実行時間、メモリ使用量、プロファイラへのリンクが表示されます。

ハローがパフォーマンスを表示

インストール

プロファイリングにはxhprofのインストールが必要です。パフォーマンスのボトルネックを特定するのに役立ちます。

pecl install xhprof
// 加えてphp.iniファイルに'extension=xhprof.so'を追加

コールグラフを可視化してグラフィック表示するためには、graphvizのインストールが必要です。 例)コールグラフデモ

// macOS
brew install graphviz

// Windows
// graphvizのWebサイトからインストーラをダウンロードしてインストール

// Linux (Ubuntu)
sudo apt-get install graphviz

アプリケーションではアプリケーションのDevコンテキストモジュールなどを作成してHaloModuleをインストールします。

class DevModule extends AbstractModule
{
    protected function configure(): void
    {
        $this->install(new HaloModule($this));
    }
}

  1. 名前はSmalltalkのフレームワーク Seasideの同様の機能が由来しています。