Laman

Jumat, 24 Februari 2012

Variabel Dengan Atribut Dinamis Twig

Hari ini saya mengalami kesulitan mengakses method entitas pada mesin template Twig.
Idenya adalah bagaimana membuat macro template untuk meciptakan tabel dari suatu entitas.
Bila dituliskan pada bahasa PHP seperti ini,
$columns = array ('id'=>'ID', 'name'=>'Name', 'address'=>'Address');

// $entities adalah object dari hasil query select database
foreach ($entities as $entity)
{
 foreach($columns as $key=>$val)
 {
  echo $entity->$key;
 }
}
dalam sytax Twig menjadi,
{% set columns = {id: "ID", name: "Name", address: "Address"} %}

{# entities adalah object dari hasil query select database #}
{% for entity in entities %}
 {% for key in columns|keys %}
  {{ entity.key }}
 {% endfor %}
{% endfor %}

Apa yang salah dengan syntax twig tersebut?

Twig menerjemahkan {{ entity.key }} dengan key bukan sebagai variabel. Pada kasus entity adalah valid objek, key diperlakukan sebagai teks sederhana untuk indeks pencarian property atau method dalam objek entity. Baca lebih lanjut tentang variabel pada Twig
Implementasinya, Twig secara berurutan akan mencari properti entity::key, method entity::key(), entity::getKey(), entity::isKey(). Jika gagal ditemukan akan menyebabkan framework menerbitkan exception Twig_Error_Runtime.
Seorang pengelana bernama Big Joe mencari wangsit di padepokan StackOverflow menanyakan hal yang hampir sama, Accessing array values using array key from Twig.

Pencerahan

http://twig.sensiolabs.org/doc/functions/attribute.html
Semenjak Twig versi 1.2 telah ditambahkan fungsi attribut untuk mengakses atribut dinamis pada variabel {{ attribute(object, method) }}.
Sytax Twig diperbaiki menjadi,
{% set columns = {id: "ID", name: "Name", address: "Address"} %}

{# entities adalah object dari hasil query select database #}
{% for entity in entities %}
 {% for key in columns|keys %}
  {{ attribute(entity, key) }}
 {% endfor %}
{% endfor %}

Tidak ada komentar:

Posting Komentar