Latte: tip sistemi nasıl kullanılır?

4 yıl önce Kimden David Grudl  

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.