Latte: Tip Sistemi Nasıl Kullanılır?
Tip sistemi. Sağlam uygulamalar geliştirmek için anahtar bir konu; PHP'nin Python, Ruby veya JavaScript gibi dinamik dillerin önüne geçtiği bir alan. Nette Framework, başlangıçtan beri programcıları tipli ve katı programlamaya yönlendirmiştir. Latte 2.7, şablonlara da tip desteği getirmiştir.

Her değişkende hangi veri veya nesne tipinin olduğunu bildiğimiz için:
- IDE doğru şekilde ipucu verebilir
- statik analiz hataları ortaya çıkarabilir
Geliştirme kalitesini ve rahatlığını önemli ölçüde artıran iki nokta.
PHP tarafında tipler nasıl bildirilir?
Verileri şablona, tüm değişkenleri ve tiplerini tanımlayan bir sınıfın nesnesi olarak ileteceğiz. PHP 7.4'ün yeni özelliklerini kullanarak şöyle görünebilir:
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Kullanım:
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Ek: PHP 8'in yeni özellikleri sayesinde örnek daha da ilginç bir şekilde şöyle yazılabilir:
class MailTemplate
{
public function __construct(
public string $lang = 'cs',
public Address $address,
public string $subject,
public ?float $price = null,
) {}
}
$latte->render('mail.latte', new MailTemplate(
lang: $this->lang,
subject: $title,
price: $this->getPrice(),
address: $userAddress,
));
Şablonda tipler nasıl bildirilir?
Belirtilen sınıfı şimdi şablonla birleştirebiliriz. Başlangıçta belirtmek yeterlidir:
{templateType MailTemplate}
Ve böylece şablonda $lang
, $address
,
$subject
ve $price
değişkenlerinin dörtlüsünün
ilgili tiplerle birlikte bulunacağını tanımladık.
Alternatif olarak, her değişkenin tipini doğrudan şablonda
tanımlayabiliriz, yani sınıf oluşturmadan. Bunun için
{varType}
etiketi kullanılır:
{varType string $lang}
{varType Address $address}
Elbette her ikisi de birleştirilebilir. Presenter tarafında ipucu vermeyi
sağlamak için bir sınıf oluşturun, {templateType}
ile
şablonla bağlayın ve bloklardaki diğer yerel değişkenler vb. için
{varType}
kullanın. Bunu, PHP kodunda bazen IDE'ye veya statik
analizöre talimat vermek için kullandığımız
/** @var type $variable */
yorumunun bir benzeri olarak
düşünebiliriz.
Yeni olarak, tip {var}
, {default}
veya
{define}
etiketlerinde de belirtilebilir:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Not: Tarihsel nedenlerden dolayı, {var}
ve
{default}
etiketlerinde değişkenleri başlangıç dolar işareti
olmadan (ve eşittir yerine ok ile) yazmak mümkündü. Bu, bunun bir tip mi
yoksa değişken mi olduğu konusunda belirsizlik yarattığından, bu
sözdizimi yasaklanmıştır ve Latte bunu kullandığınızda sizi
uyaracaktır. Şablonlarınızda bu eski yazımın olup olmadığını aramanın
basit bir yolu, /\{(var|default) [^$]/
ve
/\{(var|default) [^}]*=>/
düzenli ifadelerini aramaktır.
İşten nasıl tasarruf edilir?
Şablon sınıfını veya {varType}
etiketlerini en kolay nasıl
yazabiliriz? Onları oluşturun. İşte bunun için {templatePrint}
ve {varPrint}
etiket çifti vardır.
Bu etiketlerden birini şablona yerleştirirseniz, normal oluşturma yerine
sınıf kodunun bir taslağı veya {varPrint}
etiketlerinin bir
listesi görüntülenir. Ardından kodu tek bir tıklamayla işaretleyip projeye
kopyalamak yeterlidir.
nette/application 3.1'in (beta sürümünde) bir parçası, presenter'lar
için daha uygun kod üreten aşırı yüklenmiş bir
{templatePrint}
etiketidir.
{varPrint}
etiketi, şablon parametreleri olmayan yerel
değişkenleri listeler. Tüm değişkenleri listelemek istiyorsanız,
{varPrint all}
kullanın.
IDE'de İpucu Verme
PhpStorm için Latte eklentisinin en son sürümü yukarıdaki etiketleri
kullanabilir ve ardından tiplere göre ipucu verebilir. Eklenti aynı zamanda
$user
, $presenter
, $basePath
vb. gibi
standart değişkenlerin tiplerini de bilir.

Statik Analiz
Amaç, bildirilen tüm tiplerin statik analiz için de kullanılabilmesidir. Örneğin, PHPStan kullanarak şablonları diğer PHP dosyaları kadar kolay bir şekilde kontrol edebilmek.
Bunun üzerinde çalışıyoruz ve Latte'nin gelecek sürümlerinden birinde göreceksiniz.
Yorum göndermek için lütfen giriş yapın