Nette Documentation Preview

syntax
Neden Şablon Kullanmalı?
************************


PHP'de neden bir şablonlama sistemi kullanmalıyım? .[#toc-why-should-i-use-a-templating-system-in-php]
------------------------------------------------------------------------------------------------------

PHP'nin kendisi bir şablonlama dili iken neden PHP'de bir şablon sistemi kullanılsın?

Öncelikle bu dilin ilginç dönemeçlerle dolu tarihini kısaca özetleyelim. HTML sayfaları oluşturmak için kullanılan ilk programlama dillerinden biri C diliydi. Ancak kısa süre sonra bu dili bu amaçla kullanmanın pratik olmadığı anlaşıldı. Bunun üzerine Rasmus Lerdorf, arka uçta C dili ile dinamik HTML oluşturulmasını kolaylaştıran PHP'yi yarattı. PHP başlangıçta bir şablonlama dili olarak tasarlanmıştı, ancak zamanla ek özellikler kazandı ve tam teşekküllü bir programlama dili haline geldi.

Bununla birlikte, hala bir şablonlama dili olarak işlev görmektedir. Bir PHP dosyası bir HTML sayfası içerebilir, burada değişkenler `<?= $foo ?>`vb.

PHP'nin tarihinin başlarında Smarty şablon sistemi, görünümü (HTML/CSS) uygulama mantığından kesin olarak ayırmak amacıyla oluşturulmuştur. Kasıtlı olarak PHP'nin kendisinden daha sınırlı bir dil sağladı, böylece örneğin bir geliştirici bir şablondan bir veritabanı sorgusu yapamadı, vb. Öte yandan, projelerde ek bir bağımlılığı temsil ediyor, karmaşıklıklarını artırıyor ve programcıların yeni bir Smarty dili öğrenmelerini gerektiriyordu. Bu tür faydalar tartışmalıydı ve şablonlar için düz PHP kullanılmaya devam etti.

Zamanla şablon sistemleri kullanışlı hale gelmeye başladı. [Kalıtım |template-inheritance], [sandbox modu |sandbox] ve saf PHP'ye kıyasla şablon oluşturmayı önemli ölçüde basitleştiren bir dizi başka özellik gibi kavramları tanıttılar. Güvenlik konusu, [XSS gibi |safety-first] güvenlik [açıklarının |safety-first] varlığı ve [kaçış |#What is escaping] ihtiyacı ön plana çıktı. Şablon sistemleri, bir programcının bunu unutması ve ciddi bir güvenlik açığı yaratması riskini ortadan kaldırmak için otomatik kaçış özelliğini getirdi (bunun bazı tuzakları olduğunu birazdan göreceğiz).

Günümüzde şablon sistemlerin faydaları, dağıtımlarıyla ilgili maliyetlerden çok daha ağır basmaktadır. Bu nedenle, bunları kullanmak mantıklıdır.


Latte neden Twig veya Blade'den daha iyi? .[#toc-why-is-latte-better-than-twig-or-blade]
----------------------------------------------------------------------------------------

Bunun çeşitli nedenleri vardır - bazıları hoş, bazıları ise son derece yararlıdır. Latte, hoş ve yararlı olanın bir kombinasyonudur.

*İlk olarak, hoş:* Latte, [PHP |syntax#Latte Understands PHP] ile aynı [sözdizimine |syntax#Latte Understands PHP] sahiptir. Tek fark etiketlerin gösteriminde, `<?=` ve `?>` yerine daha kısa olan `{` ve `}` tercih ediliyor. Bu, yeni bir dil öğrenmek zorunda olmadığınız anlamına gelir. Eğitim maliyetleri minimum düzeydedir. En önemlisi, geliştirme sırasında PHP dili ile şablon dili arasında sürekli "geçiş" yapmak zorunda kalmazsınız, çünkü ikisi de aynıdır. Bu, Python dilini kullanan Twig şablonlarının aksine, programcıyı iki farklı dil arasında geçiş yapmaya zorlar.

*Şimdi son derece yararlı bir nedene gelelim:* Twig, Blade veya Smarty gibi tüm şablon sistemleri, otomatik [kaçış |#What is escaping] şeklinde XSS'ye karşı koruma içerecek şekilde gelişmiştir. Daha doğrusu, `htmlspecialchars()` işlevinin otomatik olarak çağrılması. Ancak Latte'nin yaratıcıları bunun hiç de doğru bir çözüm olmadığını fark ettiler. Bunun nedeni, belgenin farklı bölümlerinin farklı kaçış yöntemleri gerektirmesidir. Naif otomatik kaçış tehlikeli bir özelliktir çünkü yanlış bir güvenlik hissi yaratır.

Otomatik kaçışın işlevsel ve güvenilir olması için, verinin belgenin neresinde çıktılandığını (bunlara bağlam diyoruz) tanıması ve kaçış işlevini buna göre seçmesi gerekir. Bu nedenle, [bağlama duyarlı |safety-first#Context-Aware Escaping] olmalıdır. Latte'nin yapabildiği de budur. HTML'i anlar. Şablonu sadece bir karakter dizisi olarak algılamaz, ancak etiketlerin, niteliklerin vb. ne olduğunu anlar. Bu nedenle, HTML metni içinde, HTML etiketleri içinde, JavaScript içinde vb. farklı kaçışlar yapar.

Latte, içeriğe duyarlı kaçış özelliğine sahip ilk ve tek PHP şablon sistemidir. Gerçekten güvenli tek şablon sistemini temsil eder.

*Ve bir başka hoş neden:* Latte HTML'yi anladığı için, çok hoş başka özellikler de sunuyor. Örneğin, [n:attributes |syntax#n:attributes]. Ya da [bağlantıları kontrol |safety-first#Link checking] etme yeteneği. Ve çok daha fazlası.


Kaçmak nedir? .[#toc-what-is-escaping]
--------------------------------------

Kaçış, istenmeyen etkileri veya hataları önlemek için bir dizeyi başka bir dizeye eklerken özel anlamları olan karakterleri karşılık gelen dizilerle değiştirmeyi içeren bir işlemdir. Örneğin, `<` karakterinin bir etiketin başlangıcını gösterdiği için özel bir anlama sahip olduğu HTML metnine bir dize eklerken, bu karakteri `&lt;` HTML varlığı olan ilgili diziyle değiştiririz. Bu, tarayıcının `<` sembolünü doğru şekilde görüntülemesini sağlar.

PHP kodu yazarken doğrudan kaçış yapmanın basit bir örneği, önüne ters eğik çizgi koyarak bir dizeye tırnak işareti eklemektir.

Kaçış konusunu [XSS'ye karşı savunma |safety-first#How to Defend Against XSS?] bölümünde daha ayrıntılı olarak ele alacağız.


Latte şablonundan bir veritabanı sorgusu çalıştırılabilir mi? .[#toc-can-a-database-query-be-executed-from-a-latte-template]
----------------------------------------------------------------------------------------------------------------------------

Şablonlarda, programcının kendilerine aktardığı nesnelerle çalışabilirsiniz. Programcı isterse şablona bir veritabanı nesnesi aktarabilir ve bir sorgu gerçekleştirebilir. Bunu yapmak istiyorlarsa, onları engellemek için bir neden yoktur.

Müşterilere veya harici kodlayıcılara şablonları düzenleme olanağı vermek istiyorsanız farklı bir durum ortaya çıkar. Bu durumda, kesinlikle veritabanına erişmelerini istemezsiniz. Elbette veritabanı nesnesini şablona aktarmayacaksınız, ancak ya başka bir nesne aracılığıyla erişilebiliyorsa? Çözüm, şablonlarda hangi yöntemlerin çağrılabileceğini tanımlamanıza olanak tanıyan [sandbox modudur |sandbox]. Bu sayede güvenlik ihlalleri konusunda endişelenmenize gerek kalmaz.


Latte, Twig ve Blade gibi şablonlama sistemleri arasındaki temel farklar nelerdir? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade]
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Latte, Twig ve Blade gibi şablonlama sistemleri arasındaki farklar temel olarak sözdizimleri, güvenlikleri ve çerçevelerle entegrasyonlarında yatmaktadır:

- Latte: PHP dili sözdizimini kullanarak öğrenmeyi ve kullanmayı kolaylaştırır. XSS saldırılarına karşı birinci sınıf koruma sağlar.
- Twig: PHP'den oldukça farklı olan Python benzeri sözdizimi kullanır. Bağlam ayrımı yapmadan kaçar. Symfony çerçevesi ile iyi entegre edilmiştir.
- Blade: PHP ve özel sözdiziminin bir karışımını kullanır. Bağlam ayrımı olmadan kaçış yapar. Laravel özellikleri ve ekosistemi ile sıkı bir şekilde entegre edilmiştir.


Şirketler için bir şablon sistemi kullanmaya değer mi? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system]
----------------------------------------------------------------------------------------------------------------------

İlk olarak, eğitim, kullanım ve genel faydalarla ilgili maliyetler sisteme bağlı olarak önemli ölçüde değişir. Latte şablonlama sistemi, PHP sözdizimini kullanması sayesinde, bu dile zaten aşina olan programcılar için öğrenmeyi büyük ölçüde kolaylaştırır. Bir programcının Latte ile yeterince tanışması genellikle birkaç saat alır, bu da eğitim maliyetlerini azaltır ve teknolojinin benimsenmesini ve en önemlisi günlük kullanımda verimliliği hızlandırır.

Ayrıca Latte, içeriğe duyarlı benzersiz kaçış teknolojisi sayesinde XSS güvenlik açığına karşı yüksek düzeyde koruma sağlar. Bu koruma, web uygulaması güvenliğini sağlamak ve kullanıcıları veya şirket verilerini tehlikeye atabilecek saldırı riskini en aza indirmek için çok önemlidir. Web uygulaması güvenliği, bir şirketin iyi itibarını korumak için de önemlidir. Güvenlik sorunları müşterilerin güven kaybına yol açabilir ve şirketin pazardaki itibarına zarar verebilir.

Latte kullanmak, her ikisini de kolaylaştırarak genel geliştirme ve bakım maliyetlerini de azaltır. Bu nedenle, bir şablonlama sistemi kullanmak kesinlikle buna değer.


Latte web uygulamalarının performansını etkiler mi? .[#toc-does-latte-affect-the-performance-of-web-applications]
-----------------------------------------------------------------------------------------------------------------

Latte şablonları hızlı bir şekilde işlense de, bu özellik gerçekten önemli değildir. Bunun nedeni, dosyaların ayrıştırılmasının ilk görüntüleme sırasında yalnızca bir kez gerçekleşmesidir. Daha sonra PHP koduna derlenir, diskte saklanır ve sonraki her istekte yeniden derleme gerektirmeden çalıştırılırlar.

Üretim ortamında bu şekilde çalışır. Geliştirme sırasında, Latte şablonları içerikleri her değiştiğinde yeniden derlenir, böylece geliştirici her zaman geçerli sürümü görür.

Neden Şablon Kullanmalı?

PHP'de neden bir şablonlama sistemi kullanmalıyım?

PHP'nin kendisi bir şablonlama dili iken neden PHP'de bir şablon sistemi kullanılsın?

Öncelikle bu dilin ilginç dönemeçlerle dolu tarihini kısaca özetleyelim. HTML sayfaları oluşturmak için kullanılan ilk programlama dillerinden biri C diliydi. Ancak kısa süre sonra bu dili bu amaçla kullanmanın pratik olmadığı anlaşıldı. Bunun üzerine Rasmus Lerdorf, arka uçta C dili ile dinamik HTML oluşturulmasını kolaylaştıran PHP'yi yarattı. PHP başlangıçta bir şablonlama dili olarak tasarlanmıştı, ancak zamanla ek özellikler kazandı ve tam teşekküllü bir programlama dili haline geldi.

Bununla birlikte, hala bir şablonlama dili olarak işlev görmektedir. Bir PHP dosyası bir HTML sayfası içerebilir, burada değişkenler <?= $foo ?>vb.

PHP'nin tarihinin başlarında Smarty şablon sistemi, görünümü (HTML/CSS) uygulama mantığından kesin olarak ayırmak amacıyla oluşturulmuştur. Kasıtlı olarak PHP'nin kendisinden daha sınırlı bir dil sağladı, böylece örneğin bir geliştirici bir şablondan bir veritabanı sorgusu yapamadı, vb. Öte yandan, projelerde ek bir bağımlılığı temsil ediyor, karmaşıklıklarını artırıyor ve programcıların yeni bir Smarty dili öğrenmelerini gerektiriyordu. Bu tür faydalar tartışmalıydı ve şablonlar için düz PHP kullanılmaya devam etti.

Zamanla şablon sistemleri kullanışlı hale gelmeye başladı. Kalıtım, sandbox modu ve saf PHP'ye kıyasla şablon oluşturmayı önemli ölçüde basitleştiren bir dizi başka özellik gibi kavramları tanıttılar. Güvenlik konusu, XSS gibi güvenlik açıklarının varlığı ve kaçış ihtiyacı ön plana çıktı. Şablon sistemleri, bir programcının bunu unutması ve ciddi bir güvenlik açığı yaratması riskini ortadan kaldırmak için otomatik kaçış özelliğini getirdi (bunun bazı tuzakları olduğunu birazdan göreceğiz).

Günümüzde şablon sistemlerin faydaları, dağıtımlarıyla ilgili maliyetlerden çok daha ağır basmaktadır. Bu nedenle, bunları kullanmak mantıklıdır.

Latte neden Twig veya Blade'den daha iyi?

Bunun çeşitli nedenleri vardır – bazıları hoş, bazıları ise son derece yararlıdır. Latte, hoş ve yararlı olanın bir kombinasyonudur.

İlk olarak, hoş: Latte, PHP ile aynı sözdizimine sahiptir. Tek fark etiketlerin gösteriminde, <?= ve ?> yerine daha kısa olan { ve } tercih ediliyor. Bu, yeni bir dil öğrenmek zorunda olmadığınız anlamına gelir. Eğitim maliyetleri minimum düzeydedir. En önemlisi, geliştirme sırasında PHP dili ile şablon dili arasında sürekli „geçiş“ yapmak zorunda kalmazsınız, çünkü ikisi de aynıdır. Bu, Python dilini kullanan Twig şablonlarının aksine, programcıyı iki farklı dil arasında geçiş yapmaya zorlar.

Şimdi son derece yararlı bir nedene gelelim: Twig, Blade veya Smarty gibi tüm şablon sistemleri, otomatik kaçış şeklinde XSS'ye karşı koruma içerecek şekilde gelişmiştir. Daha doğrusu, htmlspecialchars() işlevinin otomatik olarak çağrılması. Ancak Latte'nin yaratıcıları bunun hiç de doğru bir çözüm olmadığını fark ettiler. Bunun nedeni, belgenin farklı bölümlerinin farklı kaçış yöntemleri gerektirmesidir. Naif otomatik kaçış tehlikeli bir özelliktir çünkü yanlış bir güvenlik hissi yaratır.

Otomatik kaçışın işlevsel ve güvenilir olması için, verinin belgenin neresinde çıktılandığını (bunlara bağlam diyoruz) tanıması ve kaçış işlevini buna göre seçmesi gerekir. Bu nedenle, bağlama duyarlı olmalıdır. Latte'nin yapabildiği de budur. HTML'i anlar. Şablonu sadece bir karakter dizisi olarak algılamaz, ancak etiketlerin, niteliklerin vb. ne olduğunu anlar. Bu nedenle, HTML metni içinde, HTML etiketleri içinde, JavaScript içinde vb. farklı kaçışlar yapar.

Latte, içeriğe duyarlı kaçış özelliğine sahip ilk ve tek PHP şablon sistemidir. Gerçekten güvenli tek şablon sistemini temsil eder.

Ve bir başka hoş neden: Latte HTML'yi anladığı için, çok hoş başka özellikler de sunuyor. Örneğin, n:attributes. Ya da bağlantıları kontrol etme yeteneği. Ve çok daha fazlası.

Kaçmak nedir?

Kaçış, istenmeyen etkileri veya hataları önlemek için bir dizeyi başka bir dizeye eklerken özel anlamları olan karakterleri karşılık gelen dizilerle değiştirmeyi içeren bir işlemdir. Örneğin, < karakterinin bir etiketin başlangıcını gösterdiği için özel bir anlama sahip olduğu HTML metnine bir dize eklerken, bu karakteri &lt; HTML varlığı olan ilgili diziyle değiştiririz. Bu, tarayıcının < sembolünü doğru şekilde görüntülemesini sağlar.

PHP kodu yazarken doğrudan kaçış yapmanın basit bir örneği, önüne ters eğik çizgi koyarak bir dizeye tırnak işareti eklemektir.

Kaçış konusunu XSS'ye karşı savunma bölümünde daha ayrıntılı olarak ele alacağız.

Latte şablonundan bir veritabanı sorgusu çalıştırılabilir mi?

Şablonlarda, programcının kendilerine aktardığı nesnelerle çalışabilirsiniz. Programcı isterse şablona bir veritabanı nesnesi aktarabilir ve bir sorgu gerçekleştirebilir. Bunu yapmak istiyorlarsa, onları engellemek için bir neden yoktur.

Müşterilere veya harici kodlayıcılara şablonları düzenleme olanağı vermek istiyorsanız farklı bir durum ortaya çıkar. Bu durumda, kesinlikle veritabanına erişmelerini istemezsiniz. Elbette veritabanı nesnesini şablona aktarmayacaksınız, ancak ya başka bir nesne aracılığıyla erişilebiliyorsa? Çözüm, şablonlarda hangi yöntemlerin çağrılabileceğini tanımlamanıza olanak tanıyan sandbox modudur. Bu sayede güvenlik ihlalleri konusunda endişelenmenize gerek kalmaz.

Latte, Twig ve Blade gibi şablonlama sistemleri arasındaki temel farklar nelerdir?

Latte, Twig ve Blade gibi şablonlama sistemleri arasındaki farklar temel olarak sözdizimleri, güvenlikleri ve çerçevelerle entegrasyonlarında yatmaktadır:

  • Latte: PHP dili sözdizimini kullanarak öğrenmeyi ve kullanmayı kolaylaştırır. XSS saldırılarına karşı birinci sınıf koruma sağlar.
  • Twig: PHP'den oldukça farklı olan Python benzeri sözdizimi kullanır. Bağlam ayrımı yapmadan kaçar. Symfony çerçevesi ile iyi entegre edilmiştir.
  • Blade: PHP ve özel sözdiziminin bir karışımını kullanır. Bağlam ayrımı olmadan kaçış yapar. Laravel özellikleri ve ekosistemi ile sıkı bir şekilde entegre edilmiştir.

Şirketler için bir şablon sistemi kullanmaya değer mi?

İlk olarak, eğitim, kullanım ve genel faydalarla ilgili maliyetler sisteme bağlı olarak önemli ölçüde değişir. Latte şablonlama sistemi, PHP sözdizimini kullanması sayesinde, bu dile zaten aşina olan programcılar için öğrenmeyi büyük ölçüde kolaylaştırır. Bir programcının Latte ile yeterince tanışması genellikle birkaç saat alır, bu da eğitim maliyetlerini azaltır ve teknolojinin benimsenmesini ve en önemlisi günlük kullanımda verimliliği hızlandırır.

Ayrıca Latte, içeriğe duyarlı benzersiz kaçış teknolojisi sayesinde XSS güvenlik açığına karşı yüksek düzeyde koruma sağlar. Bu koruma, web uygulaması güvenliğini sağlamak ve kullanıcıları veya şirket verilerini tehlikeye atabilecek saldırı riskini en aza indirmek için çok önemlidir. Web uygulaması güvenliği, bir şirketin iyi itibarını korumak için de önemlidir. Güvenlik sorunları müşterilerin güven kaybına yol açabilir ve şirketin pazardaki itibarına zarar verebilir.

Latte kullanmak, her ikisini de kolaylaştırarak genel geliştirme ve bakım maliyetlerini de azaltır. Bu nedenle, bir şablonlama sistemi kullanmak kesinlikle buna değer.

Latte web uygulamalarının performansını etkiler mi?

Latte şablonları hızlı bir şekilde işlense de, bu özellik gerçekten önemli değildir. Bunun nedeni, dosyaların ayrıştırılmasının ilk görüntüleme sırasında yalnızca bir kez gerçekleşmesidir. Daha sonra PHP koduna derlenir, diskte saklanır ve sonraki her istekte yeniden derleme gerektirmeden çalıştırılırlar.

Üretim ortamında bu şekilde çalışır. Geliştirme sırasında, Latte şablonları içerikleri her değiştiğinde yeniden derlenir, böylece geliştirici her zaman geçerli sürümü görür.