Latte: kako do tipskega sistema?
Tipski sistem. Ključna zadeva za razvoj robustnih aplikacij, pri kateri je PHP pridobil veliko prednost pred dinamičnimi jeziki, kot so Python, Ruby ali JavaScript. Ogrodje Nette že od začetka programerje vodi k tipskemu in strogemu programiranju. Latte 2.7 je prinesel podporo tipom tudi v predloge.

Zahvaljujoč temu, da vemo, kateri podatkovni ali objektni tip je v vsaki spremenljivki, lahko
- IDE pravilno predlaga
- statična analiza odkrije napake
Dve točki, ki bistveno povečujeta kakovost in udobje razvoja.
Kako deklarirati tipe na strani PHP?
Podatke bomo predlogi posredovali kot objekt razreda, ki definira vse spremenljivke in njihove tipe. Z uporabo novih lastnosti PHP 7.4 bi lahko izgledal takole:
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Uporaba:
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Dopolnitev: zahvaljujoč novim lastnostim PHP 8 lahko primer zapišemo še bolj zanimivo takole:
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,
));
Kako deklarirati tipe v predlogi?
Navedeni razred lahko zdaj povežemo s predlogo. Dovolj je, da na začetku navedemo:
{templateType MailTemplate}
In s tem smo definirali, da bodo v predlogi štiri spremenljivke
$lang
, $address
, $subject
in
$price
vključno z ustreznimi tipi.
Alternativa je definiranje tipov posameznih spremenljivk neposredno
v predlogi, tj. brez ustvarjanja razreda. Za to služi značka
{varType}
:
{varType string $lang}
{varType Address $address}
Seveda lahko oboje kombiniramo. Ustvarimo razred, ker s tem zagotovimo
predlaganje na strani presenterja, ga povežemo s predlogo s pomočjo
{templateType}
in za ostale lokalne spremenljivke v blokih ipd.
uporabljamo {varType}
. Kar lahko razumemo kot analogijo
/** @var type $variable */
, kar je komentar, s katerim včasih
v PHP kodi usmerjamo IDE ali statični analizator.
Po novem lahko tip navedemo tudi v značkah {var}
,
{default}
ali {define}
:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Opomba: iz zgodovinskih razlogov je bilo mogoče v značkah
{var}
in {default}
pisati spremenljivke tudi brez
začetnega znaka dolarja (in s puščico namesto enačaja). Ker to ustvarja
dvoumnost, ali gre za tip ali spremenljivko, je ta sintaksa prepovedana in Latte
vas bo ob njeni uporabi opozoril. Preprost način, kako preiskati svoje
predloge, ali imate tam ta stari zapis, je iskanje regularnih izrazov
/\{(var|default) [^$]/
in
/\{(var|default) [^}]*=>/
.
Kako si prihraniti delo?
Kako najlažje napisati razred predloge ali značke {varType}
?
Naj se vam generirajo. Prav za to obstaja par značk
{templatePrint}
in {varPrint}
.
Če katero od teh značk postavite v predlogo, se namesto običajnega izrisa
prikaže predlog kode razreda oz. seznam značk {varPrint}
. Kodo
nato z enim klikom označite in kopirate v projekt.
Del nette/application 3.1 (v beta različici) je preobremenjena značka
{templatePrint}
, ki generira kodo, bolje prilagojeno za
presenterje.
Značka {varPrint}
izpisuje lokalne spremenljivke, ki niso
parametri predloge. Če želite izpisati vse spremenljivke, uporabite
{varPrint all}
.
Predlaganje v IDE
Najnovejša različica Latte vtičnika za PhpStorm zna izkoristiti zgoraj
navedene značke in nato predlagati na podlagi tipov. Vtičnik hkrati pozna tipe
standardnih spremenljivk, kot so na primer $user
,
$presenter
, $basePath
itd.

Statična analiza
Cilj je, da bi se dali vsi deklarirani tipi uporabiti tudi za statično analizo. Da bi bilo na primer s pomočjo PHPStan mogoče preverjati predloge enako enostavno kot druge PHP datoteke.
Na tem delamo in dočakali boste v kateri od prihodnjih različic Latte.
Če želite oddati komentar, se prijavite