Latte: tip sistemi nasıl kullanılır?
Tip sistemi, sağlam uygulamaların geliştirilmesi için temel unsurdur. PHP'deki tipler Python, Ruby veya JavaScript gibi diğer dinamik dillere göre üstünlüğe sahiptir. Nette Framework programcıları en başından itibaren tipli ve katı kod üretmeye yönlendirir. Latte 2.7 şablonlara da tip desteği getirmiştir.
Her değişkenin hangi veri veya nesne türünde olduğunu bilmek
- IDE'nin doğru şekilde otomatik tamamlaması
- hataları tespit etmek için statik analiz
Gelişimin kalitesini ve rahatlığını önemli ölçüde artıran iki nokta.
PHP tarafında türler nasıl bildirilir?
Verileri şablona, tüm değişkenleri ve türlerini tanımlayan bir sınıfın nesnesi olarak aktaracağız. 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);
Ekleme: PHP 8'in yeni özellikleri sayesinde, örnek bu şekilde daha ilginç bir şekilde 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,
));
Bir şablonda türler nasıl bildirilir?
Artık bu sınıfı şablonla ilişkilendirebiliriz. Sadece bunu başlangıçta belirtmemiz gerekiyor:
{templateType MailTemplate}
Ve bununla birlikte, şablonun ilgili türleriyle birlikte
$lang
, $address
, $subject
ve
$price
değişkenlerinden oluşan bir dörtlü içereceğini
tanımladık.
Bunun alternatifi, her değişkenin türünü doğrudan şablonda, yani bir
sınıf oluşturmadan tanımlamaktır. Bu amaçla {varType}
etiketi
kullanılır:
{varType string $lang}
{varType Address $address}
Elbette her ikisi de birleştirilebilir. Sunucu tarafında tamamlanmasını
sağlayacağı için bir sınıf oluşturun, {templateType}
kullanarak şablona bağlayın ve bloklardaki diğer yerel değişkenler vb.
için {varType}
kullanın. Bu bir benzetme olarak anlaşılabilir
/** @var type $variable */
, bazen PHP kodunda IDE veya statik
analiz aracına talimat vermek için kullandığımız bir yorumdur.
Ayrıca, tür {var}
, {default}
veya
{define}
şeklinde belirtilebilir:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Not: tarihsel nedenlerden dolayı, değişkenleri {var}
ve
{default}
etiketlerinde baştaki dolar işareti olmadan yazmak
mümkündü. Bu, bir tür mü yoksa bir değişken mi olduğu konusunda
belirsizlik yarattığından, bu sözdizimi kullanımdan kaldırılmıştır ve
Latte bunu kullandığınızda sizi uyaracaktır.
İşinizi nasıl basitleştiriyorsunuz?
Bir şablon sınıfı veya {varType}
mümkün olduğunca kolay
nasıl yazılır? Onları oluşturun. {templatePrint}
ve
{varPrint}
etiket çiftleri tam olarak bunu yapar.
Bu etiketlerden birini bir şablona yerleştirirseniz, normal oluşturma yerine sınıfın veya şablonun kodu görüntülenir. Daha sonra kodu seçip projenize kopyalamanız yeterlidir.
Nette/application 3.1 (beta), sunum yapanlar için daha uygun kod üreten
aşırı yüklenmiş bir {templatePrint}
etiketi içerir.
{varPrint}
etiketi, şablon parametreleri olmayan yerel
değişkenleri listeler. Tüm değişkenleri listelemek istiyorsanız,
{varPrint all}
etiketini kullanın.
IDE kod tamamlama
PhpStorm Latte eklentisinin en son sürümü yukarıdaki etiketlerden
yararlanabilir ve daha sonra türlere göre önerebilir. Eklenti ayrıca
$user
, $presenter
, $basePath
, vb. gibi
standart değişkenlerin türlerini de bilir.
Statik analiz
Nihai hedef, bildirilen tüm türlerin statik analiz için de kullanılabilmesidir. Örneğin, şablonları diğer PHP dosyaları gibi kolayca kontrol etmek için PHPStan'ı kullanmak.
Bunun üzerinde çalışıyoruz ve Latte'nin sonraki sürümlerinden birinde göreceksiniz.
Yorum göndermek için lütfen giriş yapın