Merhaba, Twig nedir?
Selamlar. Bu yazımda twig nedir, nasıl kullanılırın ufak bir kaç bilgisini vermeye çalışacağım. Öncelikle bu yazının symfony öğreniyorum serisiyle ilişkisinin birebir mevcut olduğunu belirtmem gerekiyor. Önceki yazımın linkini de şöyle ekleyeyim :
http://atakansavas.com/symfony-4-proje-olusturma/ Şimdi başlayayım;
Twig nedir? (resmi sitesi)
Kısaca twig bir template motorudur. .Net’teki razor gibi. Nasıl razor engine .cshtml formatına sahip ve başına @ koyularak kodlar yazılabiliyorsa, twig de aynı mantığa sahip fakat syntax’ı farklı. Galiba PHP template engine’ler arasında en hızlısı buydu galiba. Bir karşılaştırma grafiği vardı ama bulamadığım için koyamadım buraya.
Basit kurallar..
Twig temel olarak iki yazım kuralına sahip.
{{ write }}
ve
{% do %}
- write olarak belirttiğim yazım, süslü parantezler içinde yazdığınız değerin, html’e render edilmesini sağlar. Oraya ne yazarsanız yazın html içinde görünür.
- do olarak belirttiğim yazım, bir kod bloğunu çalıştırmak içindir. Döngüler, If, Blocks yapıları gibi.
Mesela böyle yani. İki yazımı da gösteren güzel bir örnek.
Razor ile .cshtml içinde foreach döngüsü açıp nasıl kullanıyorsak, aynı mantığı burada kullanıyoruz. Sadece yazım farklı.
Bu arada şöyle bir mevzu var. Twig içinde unix syntax kullanıldığı için kodları ilk başta yazmak biraz zor geliyor. Ancak akıcı bir hale gelmesi için biraz pratik yapmanız yeterli.
Mesela yandaki fotoğrafta, comments değişkeninin eleman sayısını aldık. Bunu da sayfaya yazdırdık. Böyle garip, tuhaf hoşluklar yani.
Base (layout) mantığı..
Şimdi sırada bir layout oluşturmaya geldi. Layout derken neyi kast ettiğimi bilmiyorsanız,
http://bfy.tw/Gjvb
Öncelikle projede gerekli dizine bir tane base.html.twig dosyası ekleyin. Bu dosya bizim layout sayfamız olacak.
Burada
{% block ile başlayan bölümler, sayfanın bölümlere ayrılmış yerleri. Alt sayfalarda buralar kullanabiliyor. Gayet de basit aslında mantığı.
Yani body block, title block, stylesheets block, javascripts block. Gerekli her şey var burada.
Yani ne desem nasıl anlatsam bilemedim.
Yani sağda da içerdeki sayfanın kullanımını görüyorsunuz. En başta
extends olarak verdiğimiz yol, layout sayfamızın adı. Ona göre içerik sayfası oluşuyor.
Ardından block’ları açıp içlerine istediğimiz kodları yazıyoruz.
Yalnız şöyle bir mevzu var, açtığınız her block ana sayfadakinin içini ezer. Overwrite eder yani. Base.twig de
header bloğuna SELAM yazın. İçerik sayfasında
header bloğuna HELLO yazın. Sayfa çalıştığında
HELLO yazacaktır. Bunu engellemenin yolu da var. Ama onu soran olursa yazıcam. Çünkü unuttum, kağıtlarım da yanımda değil bakamıyorum. Ama soran olursa bakıp bulup söylerim özellikle.