Qiq 1.x から 2.x へのアップグレードは簡単ですが、時間がかかる場合があります。
割り当て変数へのマジック __get()
、__set()
などのアクセスが削除されました。
これは、テンプレートファイルが割り当て変数に対して もはや $this->var
を使用しない ことを意味します。
代わりに、$var
($this->
プレフィックスなし)を使用します。これはテンプレートファイルでの静的解析をサポートするためです。
割り当て変数を直接変更する必要がある場合は、&refData()
を使用して割り当てられたデータの配列への参照を取得します。この配列への変更は、次の render()
呼び出し時に反映されます。
セクションは完全に削除され、ブロックに置き換えられました。setSection()
、preSection()
、addSection()
、getSection()
の代わりに、setBlock()
、parentBlock()
、getBlock()
を使用します。詳細についてはブロックのドキュメントを参照してください。
HelperLocator は完全に削除され、Helpers と Container に置き換えられました。カスタムヘルパーがある場合は、カスタムヘルパーのドキュメントに従って、テンプレートで使用できるようにする必要があります。
タグ関連のヘルパーは、属性に配列を使用しなくなりました。代わりに、名前付きパラメータを使用します。例えば、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
に置き換えられました。
すべてのQiqコードは現在 strict_types=1
を宣言し、静的解析の対象となっています。通常、これはQiqに送信するコードをより厳密にする必要があることを意味します。
しかし、ほとんどの文字列のようなパラメータは mixed
として型付けされ、@param
docblockでタイプを null|scalar|Stringable
(またはその配列)として示しています。これは、mixed
値を string
にキャストすることが、文字列出力用にエスケープされる際に静的解析ツールによってフラグが立てられるためです。
結果として、Qiqに送信する値を再キャストする必要はほとんどないはずですが、これらの変更には注意してください。
Engine インターフェースが導入されました。
TemplateCore は Kernel に名前が変更され、Engine インターフェースを実装しています。
Template::new()
は Kernel::new()
に移動されました。
TemplateLocator は Catalog に名前が変更されました。TemplateLocator::get()
は現在 Catalog::getCompiled()
です。
Compiler インターフェースは現在 Qiq\Compiler 名前空間ではなく、Qiq 名前空間で定義されています。
Exception クラスは現在 Qiq\Exception 名前空間ではなく、Qiq 名前空間で定義されています。
HelperNotFound 例外は ObjectNotFound に名前が変更され、PSR-11 NotFoundExceptionInterface を実装しています。
TemplateNotFound 例外は FileNotFound に名前が変更されました。
Indent クラスは現在、静的メソッドではなくインスタンスメソッドを使用し、Container 内でインスタンスとして共有されています。