1.12. アップグレード

1.12.1. 1.x から 2.x へ

Qiq 1.x から 2.x へのアップグレードは簡単ですが、時間がかかる場合があります。

1.12.1.1. Assigned Variables

割り当て変数へのマジック __get()__set() などのアクセスが削除されました。

これは、テンプレートファイルが割り当て変数に対して もはや $this->var を使用しない ことを意味します。

代わりに、$var$this-> プレフィックスなし)を使用します。これはテンプレートファイルでの静的解析をサポートするためです。

割り当て変数を直接変更する必要がある場合は、&refData() を使用して割り当てられたデータの配列への参照を取得します。この配列への変更は、次の render() 呼び出し時に反映されます。

1.12.1.2. セクションとブロック

セクションは完全に削除され、ブロックに置き換えられました。setSection()preSection()addSection()getSection() の代わりに、setBlock()parentBlock()getBlock() を使用します。詳細についてはブロックのドキュメントを参照してください。

1.12.1.3. ヘルパー

HelperLocator は完全に削除され、HelpersContainer に置き換えられました。カスタムヘルパーがある場合は、カスタムヘルパーのドキュメントに従って、テンプレートで使用できるようにする必要があります。

タグ関連のヘルパーは、属性に配列を使用しなくなりました。代わりに、名前付きパラメータを使用します。例えば、1.x でのテキストフィールドヘルパーの呼び出しは次のようでした:

{{= textField ([
  'name' => 'foo',
  'value' => 'foo text',
  'id' => 'foo-id',
]) }}

2.x では、次のように呼び出します。配列とそのキーが名前付きパラメータに置き換えられていることに注意してください:

{{= textField (
  name: 'foo',
  value: 'foo text',
  id: 'foo-id',
) }}

移行の補助として、スプレッド(...)演算子を使用して配列を名前付きパラメータに展開することができます:

{{= textField (...[
  'name' => 'foo',
  'value' => 'foo text',
  'id' => 'foo-id',
]) }}

さらに:

  • すべてのHTMLヘルパーが Qiq\Helper 名前空間から Qiq\Helper\Html 名前空間に移動されました。Helper クラスは TagHelper に名前が変更されました。

  • Escape クラスは現在 Qiq 名前空間ではなく、Qiq\Helper\Html 名前空間で定義されています。

  • 属性ビルダーは _raw 疑似属性を尊重しなくなりました。タグ本文のテキストをエスケープしたくない場合は、手動で構築する必要があります。

  • 様々なフォーム関連ヘルパーの _default 疑似属性は、名前付きパラメータ default に置き換えられました。

  • 様々なフォーム関連ヘルパーの _options 疑似属性は、名前付きパラメータ options に置き換えられました。

1.12.1.4. 静的解析

すべてのQiqコードは現在 strict_types=1 を宣言し、静的解析の対象となっています。通常、これはQiqに送信するコードをより厳密にする必要があることを意味します。

しかし、ほとんどの文字列のようなパラメータは mixed として型付けされ、@param docblockでタイプを null|scalar|Stringable(またはその配列)として示しています。これは、mixed 値を string にキャストすることが、文字列出力用にエスケープされる際に静的解析ツールによってフラグが立てられるためです。

結果として、Qiqに送信する値を再キャストする必要はほとんどないはずですが、これらの変更には注意してください。

1.12.1.5. その他の変更

  • Engine インターフェースが導入されました。

  • TemplateCoreKernel に名前が変更され、Engine インターフェースを実装しています。

  • Template::new()Kernel::new() に移動されました。

  • TemplateLocatorCatalog に名前が変更されました。TemplateLocator::get() は現在 Catalog::getCompiled() です。

  • Compiler インターフェースは現在 Qiq\Compiler 名前空間ではなく、Qiq 名前空間で定義されています。

  • Exception クラスは現在 Qiq\Exception 名前空間ではなく、Qiq 名前空間で定義されています。

  • HelperNotFound 例外は ObjectNotFound に名前が変更され、PSR-11 NotFoundExceptionInterface を実装しています。

  • TemplateNotFound 例外は FileNotFound に名前が変更されました。

  • Indent クラスは現在、静的メソッドではなくインスタンスメソッドを使用し、Container 内でインスタンスとして共有されています。