Template にデータコレクションを割り当てるには、setData()
メソッドを使用し、配列または stdClass
オブジェクトを渡します。
$template->setData([
'items' => [
[
'id' => '1',
'name' => 'Foo',
],
[
'id' => '2',
'name' => 'Bar',
],
[
'id' => '3',
'name' => 'Baz',
],
)
]);
setData()
メソッドは、Template オブジェクト内の既存のすべてのデータを上書きします。
一方、addData()
メソッドは、任意の iterable
を既存の Template データとマージします。
$template->addData([
'title' => 'My Items',
]);
テンプレートファイル内で割り当てられたデータを変数として使用できます:
<p>{{h $title}}</p>
<ul>
{{ foreach ($items as $id => $name): }}
<li id="{{a $id}}">{{h $name }}</li>
{{ endforeach }}
</ul>
割り当てられたすべてのデータのコピーを配列として取得したい場合は、getData()
を使用します。コピーに加えた変更は コピーに対してのみ 行われ、Template に実際に割り当てられたデータには影響しません。
あるいは、割り当てられたすべてのデータの配列への 参照 を取得したい場合は、&refData()
を使用します。参照に加えた変更は、実際に割り当てられたデータに反映されます。
setData()
または addData()
で Template オブジェクトに割り当てられたデータは、参照によってすべてのテンプレートファイルで共有されます。あるテンプレートファイルで割り当てられた変数を変更すると、その変更は他のすべてのテンプレートファイルと共有されます。上記の例では、$title
と $items
はすべてのテンプレートファイルで利用可能です。$title
や $items
への変更は、他のテンプレートファイルを通じて共有されます。
ただし、テンプレートファイル内で作成された変数は、そのテンプレートファイルのみにローカルです。それらは他のテンプレートとは共有されません。上記の例では、$id
と $name
(テンプレートファイル内で作成されているため)はそのテンプレートファイルのみにローカルであり、それらへの変更は他の場所では見られません。
テンプレートファイルを設計する際は、割り当てられた変数をローカル変数で誤って上書きしないように注意してください。割り当てられた値への変更は他のすべてのテンプレートと共有されるため、意図しない結果になる可能性があります。
最後に、テンプレートファイル 内部 から setData()
、addData()
、&refData()
を通じて割り当てられた変数への変更は、そのテンプレートファイル内では 反映されず、次にレンダリングされるテンプレートでのみ反映されます。これは、割り当てられた変数が既に現在のスコープに展開されているためで、変更された値は次にレンダリングされるテンプレートでのみ反映されます。