Nette Documentation Preview

syntax
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.

  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.