Latte 3.0'dan geçiş

Latte 3.1, şablonları daha güvenli ve yazması daha rahat kılan birkaç iyileştirme ve değişiklik getiriyor. Değişikliklerin çoğu geriye dönük uyumludur, ama bazıları geçiş sırasında dikkat gerektirir. Bu kılavuz, uyumluluğu bozan değişiklikleri ve onlarla nasıl başa çıkılacağını özetler.

Latte 3.1, PHP 8.2 veya daha yenisini gerektirir.

Akıllı nitelikler ve geçiş

Latte 3.1'deki en önemli değişiklik, Akıllı niteliklerin yeni davranışıdır. Bu, null değerlerin ve data- niteliklerindeki boole değerlerin nasıl render edildiğini etkiler.

  1. null değerler: Önceden title={$null}, title="" olarak render ediliyordu. Artık nitelik tamamen düşürülür.
  2. data- nitelikleri: Önceden data-foo={=true} / data-foo={=false}, data-foo="1" / data-foo="" olarak render ediliyordu. Artık data-foo="true" / data-foo="false" olarak render edilir.

Uygulamanızda çıktının değiştiği yerleri belirlemenize yardımcı olmak için Latte bir geçiş aracı sunar.

Geçiş uyarıları

Geçiş uyarılarını etkinleştirebilirsiniz; render sırasında çıktı Latte 3.0'dakinden farklıysa sizi uyarırlar.

$latte = new Latte\Engine;
$latte->setFeature(Latte\Feature::MigrationWarnings);

Etkinleştirildiğinde, uygulamanızın günlüklerini veya Tracy çubuğunu E_USER_WARNING için denetleyin. Her uyarı, şablondaki belirli satır ve sütunu gösterir.

Uyarılar nasıl giderilir:

Yeni davranış doğruysa (örneğin boş niteliğin kaybolmasını istiyorsanız), uyarıyı bastırmak için |accept filtresiyle onaylayın:

<div title={$var|accept}></div>

Niteliği düşürmek yerine boş tutmak istiyorsanız (örneğin title=""), null birleştirme operatörünü kullanın:

<div title={$var ?? ''}></div>

Ya da kesinlikle eski davranışı istiyorsanız (örneğin true için "1"), değeri açıkça dizeye dönüştürün:

<div data-foo={(string) $bool}></div>

Tüm uyarıları giderdikten sonra:

Tüm uyarılar giderildiğinde geçiş uyarılarını kapatın ve artık gerekmediklerinden şablonlarınızdaki tüm |accept filtrelerini kaldırın.

Katı tipler

Latte 3.1, derlenen tüm şablonlar için varsayılan olarak declare(strict_types=1) etkinleştirir. Bu tip güvenliğini artırır, ama gevşek tiplemeye güveniyorduysanız şablonlarınızdaki PHP ifadelerinde tip hatalarına yol açabilir.

Tipleri hemen düzeltemiyorsanız bu davranışı kapatabilirsiniz:

$latte->setFeature(Latte\Feature::StrictTypes, false);

Genel sabitler

Şablon ayrıştırıcısı, basit dizeler ile sabitleri daha iyi ayırt edecek şekilde iyileştirildi. Sonuç olarak genel sabitlerin önüne artık ters eğik çizgi \ konmalıdır.

{* Eski yol (uyarı fırlatır; ileride 'PHP_VERSION' dizesi olarak yorumlanacak) *}
{if PHP_VERSION > ...}

{* Yeni yol (doğru biçimde sabit olarak yorumlanır) *}
{if \PHP_VERSION > ...}

Bu değişiklik belirsizliği önler ve tırnaksız dizeleri daha serbest kullanmanıza olanak tanır.

Kaldırılan ve kullanımdan kaldırılan özellikler

Ayrılmış değişkenler: $__ (çift alt çizgi) ile başlayan değişkenler ve $this değişkeni Latte'nin iç kullanımına ayrılmıştır. Varsayılan olarak onları kullanmak hâlâ çalışır ama bir kullanımdan kaldırma uyarısı tetikler; yalnızca katı ayrıştırma etkinken derleme hatası fırlatır. İç değişkenler $ʟ_… ve $GLOBALS her zaman yasaktır.

Undefined-safe operatörü: PHP 8'den önce yaratılmış, Latte'ye özgü bir özellik olan ??-> operatörü kaldırıldı. Tarihsel bir kalıntıdır. Lütfen standart PHP nullsafe operatörünü ?-> kullanın.

Filter loader Engine::addFilterLoader() metodu kullanımdan kaldırıldı ve silindi. Latte'nin başka hiçbir yerinde bulunmayan tutarsız bir kavramdı.

Tarih formatı Genel durumdan kaçınmak için Latte\Runtime\Filters::$dateFormat statik özelliği kaldırıldı.

Yeni özellikler

Geçiş yaparken yeni özelliklerin tadını çıkarmaya başlayabilirsiniz:

  • Akıllı HTML nitelikleri: class ve style'a dizi verin, null nitelikleri otomatik düşürün.
  • Nullsafe filtreler: null değerlerin filtrelenmesini atlamak için {$var?|filter} kullanın.
  • n:elseif: Artık n:if ve n:else yanında n:elseif de kullanabilirsiniz.
  • Basitleştirilmiş sözdizimi: <div n:if={$cond}> yazımını tırnaksız kullanın.
  • Toggle filtresi: Boole nitelikleri üzerinde elle denetim için |toggle kullanın.
versiyon: 3.x