Latte 3.0'dan geçiş
*******************
.[perex]
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 |/html-attributes] 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ı |/develop#Geçiş uyarıları] etkinleştirebilirsiniz; render sırasında çıktı Latte 3.0'dakinden farklıysa sizi uyarırlar.
```php
$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:
```latte
<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:
```latte
<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:
```latte
<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:
```php
$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.
```latte
{* 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.
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.
null değerler: Önceden title={$null}, title="" olarak render ediliyordu.
Artık nitelik tamamen düşürülür.
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.