Qiq Templates for PHP 8

Qiq is easy. Qiq is clean. Qiq is PHP.

インストール

Composer を通じて Qiq をインストールした後...

composer require qiq/qiq ^3.0

...はここから始められます。

Githubリポジトリはqiqphp/qiq にあります。

なぜQiqを使うのか?

Qiqは、ネイティブPHPテンプレートを好むが、より簡潔さを求める開発者向けです。 以下を提供します:

Qiqは、デザイナーやコンテンツ作成者に対してテンプレートを何らかの方法で「保護」する必要があるシステムには向いていません。そのような場合は、 HandlebarsMustache、 またはTwigのようなものを使用してください。

Qiqテンプレートとは?

Qiqは通常のPHPで、必要に応じて軽いシンタックスシュガーを加えたものです。

例えば、通常のPHPでのエスケープは次のようになります:

<?php echo htmlspecialchars(
    $var,
    ENT_QUOTES|ENT_DISALLOWED,
    'utf-8'
) ?>

これは、HTMLエスケープ用のQiqヘルパーを使用した同じものです:

<?= $this->h($var) ?>

最後に、これはQiqのシンタックスシュガーを使用した同じものです:

{{h $var }}

同じテンプレート内で通常のPHPとQiqを常に混在させることができます。例えば:

<?php $var = random_int(1, 99) ?>
{{h $var }}

実際、認識されないQiqコードはPHPとして扱われます。例えば、次のQiqコードは...

{{ $title = "Prefix: " . $title . " (Suffix)" }}
<title>{{h $title}}</title>

...このPHPコードとQiqヘルパーと同等です:

<?php $title = "Prefix: " . $title . " (Suffix)" ?>
<title><?= $this->h($title) ?></title>

これにより、既存のPHPテンプレートでQiqを簡単に使用でき、必要に応じてPHP構文からQiq構文への円滑な移行が可能になります。

Qiqヘルパーとは?

Qiqヘルパーは単に_Helper_オブジェクトのメソッドです。例えば、HTML フォーム要素の<select>を追加するには、Qiqでヘルパーを使用して生成できます...

{{= select (
    id: 'country-select',
    name: 'Country',
    value: 'usa',
    placeholder: 'Please pick a country',
    default: 'usa',
    options: [
        'usa' => 'United States',
        'can' => 'Canada',
        'mex' => 'Mexico',
    ],
) }}

..または通常のPHPで

<?= $this->select (
    id: 'country-select',
    name: 'Country',
    value: 'usa',
    placeholder: 'Please pick a country',
    default: 'usa',
    options: [
        'usa' => 'United States',
        'can' => 'Canada',
        'mex' => 'Mexico',
    ],
) ?>

一般的なHTMLヘルパーフォームヘルパーについてさらに詳しく読むか、カスタムヘルパーの作成方法を学んでください。

なぜ明示的なエスケープなのか?

Qiqは自動エスケープを提供しません。設計上、{{ ... }}タグは出力を生成しません。すべての出力は、特定のコンテキストに対して明示的にエスケープする必要があり、開始タグの後の最初の文字で示されます:

  • {{h ... }} はHTML コンテンツ用にエスケープします
  • {{a ... }} はHTML 属性用にエスケープします
  • {{u ... }} はURL 用にエスケープします
  • {{c ... }} はCSS 用にエスケープします
  • {{j ... }} はJavaScript 用にエスケープします
  • {{= ... }} は生の、エスケープされていない出力です

これはQiqの意図的な設計選択です。自動エスケープを使用すると、どのコンテキストでエスケープすべきかを忘れやすくなります。コンテキストを明示的にマークすることで、常に何をしているかを考える必要があります。セキュリティに関しては、これは良いことです。

もっと知りたいですか?ここから始めましょう!