الوسم for في Twig

من موسوعة حسوب

يكرر وسم for على كل عنصر من عناصر تسلسل ما، فمثلًا إذا أردنا عرض قائمة من المستخدمين الموجودين في متغير اسمه users:

<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

لاحظ أن التسلسل قد يكون مصفوفة أو كائنًا يستخدم واجهة Traversable. وللتكرار على تسلسل من الأعداد فيمكن استخدام العامل ..:

{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

ستطبع الشيفرة أعلاه جميع الأعداد من 0 إلى 10. كذلك قد يكون مفيدًا مع الحروف:

{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}

يأخذ العامل .. أي تعبير على كلا جانبيه:

{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

إذا أردت خطوة مختلفة عن 1 فاستخدام دالة range.

متغير loop

يمكن الوصول إلى بعض المتغيرات الخاصة داخل كتلة التكرار لـ for:

المتغير الوصف
loop.index التكرار الحالي للحلقة (1 مفهرس)
loop.index0 التكرار الحالي للحلقة (0 مفهرس)
loop.revindex عدد التكرارات من نهاية الحلقة (1 مفهرس)
loop.revindex0 عدد التكرارات من نهاية الحلقة (0 مفهرس)
loop.first تتحقق -أي تكون true- في حالة التكرار الأول
loop.last تتحقق -أي تكون true- في حالة التكرار الأخير
loop.length عدد العناصر في التسلسل
loop.parent السياق
{% for user in users %}
    {{ loop.index }} - {{ user.username }}
{% endfor %}

لاحظ أن المتغيرات loop.length و loop.revindex و loop.revindex0 و loop.last متاحة لمصفوفات PHP فقط أو الكائنات التي تستخدم الواجهة Countable.

الشرط else

إذا لم يحدث تكرار بسبب فراغ التسلسل فيمكن إخراج render كتلة بديلة باستخدام else:

<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% else %}
        <li><em>no user found</em></li>
    {% endfor %}
</ul>

التكرار على المفاتيح

تكرِّر الحلقة افتراضيًا على قيم التسلسل، ويمكن التكرار على المفاتيح باستخدام المرشح keys:

<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

التكرار على المفاتيح والقيم

تستطيع الوصول إلى كل من المفاتيح والقيم كما يلي:

<h1>Members</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

التكرار على مجموعة فرعية

إذا أردت التكرار على مجموعة فرعية subset من القيم، فاستخدم المرشح slice:

<h1>Top Ten Members</h1>
<ul>
    {% for user in users|slice(0, 10) %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

انظر أيضًا

المصادر