Latte: cum să abordăm sistemul de tipuri?
Sistemul de tipuri. O problemă cheie pentru dezvoltarea aplicațiilor robuste, în care PHP a câștigat un avantaj semnificativ față de limbajele dinamice precum Python, Ruby sau JavaScript. Framework-ul Nette i-a ghidat pe programatori către programarea tipizată și strictă încă de la început. Latte 2.7 a adus suport pentru tipuri și în șabloane.

Datorită faptului că știm ce tip de date sau obiect se află în fiecare variabilă, putem:
- IDE-ul să ofere sugestii corecte
- analiza statică să detecteze erori
Două puncte care cresc fundamental calitatea și confortul dezvoltării.
Cum să declarăm tipurile în partea PHP?
Vom transmite datele către șablon ca un obiect al unei clase care definește toate variabilele și tipurile lor. Folosind noile caracteristici ale PHP 7.4, ar putea arăta astfel:
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Utilizare:
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Completare: datorită noilor caracteristici ale PHP 8, exemplul poate fi scris și mai interesant astfel:
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,
));
Cum să declarăm tipurile în șablon?
Acum putem conecta clasa menționată cu șablonul. Este suficient să specificăm la început:
{templateType MailTemplate}
Și astfel am definit că în șablon vor exista patru variabile
$lang
, $address
, $subject
și
$price
inclusiv tipurile corespunzătoare.
O alternativă este definirea tipurilor variabilelor individuale direct în
șablon, adică fără a crea o clasă. Pentru aceasta se folosește tag-ul
{varType}
:
{varType string $lang}
{varType Address $address}
Desigur, ambele pot fi combinate. Creați o clasă, deoarece astfel
asigurăm sugestii în partea presenterului, o conectăm la șablon folosind
{templateType}
și pentru alte variabile locale în blocuri etc.
folosim {varType}
. Pe care le putem considera echivalente cu
/** @var type $variable */
, care este un comentariu prin care
uneori instruim IDE-ul sau analizatorul static în codul PHP.
Acum tipul poate fi specificat și în tag-urile {var}
,
{default}
sau {define}
:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Notă: din motive istorice, în tag-urile {var}
și
{default}
era posibil să se scrie variabile și fără dolarul
inițial (și cu săgeată în loc de egal). Deoarece acest lucru creează
ambiguitate dacă este vorba de un tip sau de o variabilă, această sintaxă
este interzisă și Latte vă va avertiza la utilizarea ei. O modalitate
simplă de a căuta în șabloanele dvs. dacă aveți această veche notație
este să căutați expresiile regulate /\{(var|default) [^$]/
și
/\{(var|default) [^}]*=>/
.
Cum să economisim muncă?
Cum să scriem cel mai ușor clasa șablonului sau tag-urile
{varType}
? Lăsați-le să fie generate. Tocmai pentru asta există
perechea de tag-uri {templatePrint}
și
{varPrint}
.
Dacă plasați unul dintre aceste tag-uri într-un șablon, în loc de
randarea normală, se va afișa o propunere de cod pentru clasă, respectiv
o listă de tag-uri {varPrint}
. Apoi este suficient să selectați
codul cu un singur clic și să-l copiați în proiect.
Parte din nette/application 3.1 (în versiune beta) este tag-ul
supraîncărcat {templatePrint}
, care generează cod mai bine
adaptat pentru presenteri.
Tag-ul {varPrint}
listează variabilele locale care nu sunt
parametri ai șablonului. Dacă doriți să listați toate variabilele,
utilizați {varPrint all}
.
Sugestii în IDE
Cea mai recentă versiune a pluginului Latte pentru PhpStorm poate utiliza
tag-urile menționate mai sus și apoi să ofere sugestii pe baza tipurilor.
Pluginul cunoaște, de asemenea, tipurile variabilelor standard, cum ar fi
$user
, $presenter
, $basePath
etc.

Analiză statică
Scopul este ca toate tipurile declarate să poată fi utilizate și pentru analiza statică. De exemplu, folosind PHPStan, să fie posibilă verificarea șabloanelor la fel de ușor ca și alte fișiere PHP.
Lucrăm la asta și veți vedea în una dintre versiunile viitoare ale Latte.
Pentru a trimite un comentariu, vă rugăm să vă conectați