1.3. テンプレートデータ

1.3.1. 変数の割り当て

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',
]);

1.3.2. 割り当てられた変数の使用

テンプレートファイル内で割り当てられたデータを変数として使用できます:

<p>{{h $title}}</p>
<ul>
    {{ foreach ($items as $id => $name): }}
    <li id="{{a $id}}">{{h $name }}</li>
    {{ endforeach }}
</ul>

1.3.3. 割り当てられた変数の取得

割り当てられたすべてのデータのコピーを配列として取得したい場合は、getData() を使用します。コピーに加えた変更は コピーに対してのみ 行われ、Template に実際に割り当てられたデータには影響しません。

あるいは、割り当てられたすべてのデータの配列への 参照 を取得したい場合は、&refData() を使用します。参照に加えた変更は、実際に割り当てられたデータに反映されます。

1.3.4. 変数のスコープ

setData() または addData()Template オブジェクトに割り当てられたデータは、参照によってすべてのテンプレートファイルで共有されます。あるテンプレートファイルで割り当てられた変数を変更すると、その変更は他のすべてのテンプレートファイルと共有されます。上記の例では、$title$items はすべてのテンプレートファイルで利用可能です。$title$items への変更は、他のテンプレートファイルを通じて共有されます。

ただし、テンプレートファイル内で作成された変数は、そのテンプレートファイルのみにローカルです。それらは他のテンプレートとは共有されません。上記の例では、$id$name(テンプレートファイル内で作成されているため)はそのテンプレートファイルのみにローカルであり、それらへの変更は他の場所では見られません。

テンプレートファイルを設計する際は、割り当てられた変数をローカル変数で誤って上書きしないように注意してください。割り当てられた値への変更は他のすべてのテンプレートと共有されるため、意図しない結果になる可能性があります。

最後に、テンプレートファイル 内部 から setData()addData()&refData() を通じて割り当てられた変数への変更は、そのテンプレートファイル内では 反映されず、次にレンダリングされるテンプレートでのみ反映されます。これは、割り当てられた変数が既に現在のスコープに展開されているためで、変更された値は次にレンダリングされるテンプレートでのみ反映されます。