Nette Documentation Preview

syntax
De ce să folosiți șabloane?
***************************


De ce ar trebui să folosesc un sistem de șabloane în PHP? .[#toc-why-should-i-use-a-templating-system-in-php]
-------------------------------------------------------------------------------------------------------------

De ce să folosiți un sistem de șabloane în PHP când PHP însuși este un limbaj de creare de șabloane?

Să recapitulăm mai întâi pe scurt istoria acestui limbaj, care este plină de răsturnări de situație interesante. Unul dintre primele limbaje de programare utilizate pentru generarea de pagini HTML a fost limbajul C. Cu toate acestea, a devenit curând evident că utilizarea acestuia în acest scop era nepractică. Astfel, Rasmus Lerdorf a creat PHP, care a facilitat generarea de HTML dinamic cu ajutorul limbajului C în backend. PHP a fost conceput inițial ca un limbaj de modelare, dar în timp a dobândit caracteristici suplimentare și a devenit un limbaj de programare cu drepturi depline.

Cu toate acestea, el funcționează în continuare ca un limbaj de modelare. Un fișier PHP poate conține o pagină HTML, în care variabilele sunt afișate cu ajutorul funcției `<?= $foo ?>`, etc.

La începutul istoriei PHP, a fost creat sistemul de șabloane Smarty, cu scopul de a separa strict aspectul (HTML/CSS) de logica aplicației. Acesta a oferit în mod deliberat un limbaj mai limitat decât PHP însuși, astfel încât, de exemplu, un programator nu putea face o interogare a bazei de date dintr-un șablon etc. Pe de altă parte, a reprezentat o dependență suplimentară în proiecte, a crescut complexitatea acestora și a cerut programatorilor să învețe un nou limbaj Smarty. Astfel de beneficii au fost controversate, iar PHP simplu a continuat să fie folosit pentru șabloane.

Cu timpul, sistemele de șabloane au început să devină utile. Acestea au introdus concepte precum [moștenirea |template-inheritance], [modul sandbox |sandbox] și o serie de alte caracteristici care au simplificat semnificativ crearea de șabloane în comparație cu PHP pur. Subiectul securității, existența unor [vulnerabilități precum XSS |safety-first] și necesitatea de a [evada |#What is escaping] a ajuns în prim-plan. Sistemele de șabloane au introdus auto-escaparea pentru a elimina riscul ca un programator să o uite și să creeze o gaură de securitate serioasă (vom vedea în scurt timp că acest lucru are anumite capcane).

Astăzi, beneficiile sistemelor de șabloane depășesc cu mult costurile asociate cu implementarea lor. Prin urmare, este logic să le folosim.


De ce este Latte mai bun decât Twig sau Blade? .[#toc-why-is-latte-better-than-twig-or-blade]
---------------------------------------------------------------------------------------------

Există mai multe motive - unele sunt plăcute, iar altele sunt extrem de utile. Latte este o combinație de plăcut și util.

*În primul rând, plăcutul:* Latte are aceeași [sintaxă ca și PHP |syntax#Latte Understands PHP]. Singura diferență este în notarea etichetelor, preferând mai scurte `{` și `}` în loc de `<?=` și `?>`. Acest lucru înseamnă că nu trebuie să învățați un nou limbaj. Costurile de formare sunt minime. Cel mai important, în timpul dezvoltării, nu trebuie să "comutați" în mod constant între limbajul PHP și limbajul șabloanelor, deoarece ambele sunt identice. Acest lucru este diferit de șabloanele Twig, care utilizează limbajul Python, ceea ce obligă programatorul să treacă de la un limbaj la altul.

*Acum, pentru motivul extrem de util:* Toate sistemele de șabloane, cum ar fi Twig, Blade sau Smarty, au evoluat pentru a include protecție împotriva XSS sub forma [scăpării |#What is escaping] automate. Mai exact, apelarea automată a funcției `htmlspecialchars()`. Cu toate acestea, creatorii lui Latte și-au dat seama că aceasta nu este deloc soluția potrivită. Acest lucru se datorează faptului că diferite părți ale documentului necesită diferite metode de escaping. Escaparea automată naivă este o funcție periculoasă, deoarece creează un fals sentiment de securitate.

Pentru ca auto-escaping-ul să fie funcțional și fiabil, acesta trebuie să recunoască în ce parte a documentului sunt emise datele (numim aceste contexte) și să aleagă funcția de scăpare în consecință. Prin urmare, trebuie să fie [sensibilă la context |safety-first#Context-Aware Escaping]. Și asta este ceea ce poate face Latte. Înțelege HTML. Nu percepe șablonul ca pe un simplu șir de caractere, ci înțelege ce sunt etichetele, atributele etc. Prin urmare, el evadează diferit în textul HTML, în interiorul tag-urilor HTML, în interiorul JavaScript, etc.

Latte este primul și singurul sistem de șabloane PHP cu escaping sensibil la context. Acesta reprezintă singurul sistem de șabloane cu adevărat sigur.

*Și un alt motiv plăcut:* Deoarece Latte înțelege HTML, oferă și alte caracteristici foarte plăcute. De exemplu, [n:attributes |syntax#n:attributes]. Sau posibilitatea de a [verifica legăturile |safety-first#Link checking]. Și multe altele.


Ce înseamnă "escaping"? .[#toc-what-is-escaping]
------------------------------------------------

Escaping-ul este un proces care presupune înlocuirea caracterelor cu semnificații speciale cu secvențe corespunzătoare atunci când se inserează un șir de caractere în altul pentru a preveni efectele nedorite sau erorile. De exemplu, atunci când se inserează un șir în textul HTML, în care caracterul `<` are o semnificație specială deoarece indică începutul unei etichete, îl înlocuim cu secvența corespunzătoare, care este entitatea HTML `&lt;`. Acest lucru permite browserului să afișeze corect simbolul `<`.

Un exemplu simplu de evadare directă la scrierea codului PHP este inserarea unui ghilimele într-un șir de caractere prin plasarea unei backslash în fața acestuia.

Discutăm mai detaliat despre escaping în capitolul [Cum să vă apărați împotriva XSS |safety-first#How to Defend Against XSS?].


Poate fi executată o interogare a unei baze de date dintr-un șablon Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template]
-----------------------------------------------------------------------------------------------------------------------------------------

În șabloane, puteți lucra cu obiecte pe care programatorul le transmite. Dacă programatorul dorește, poate trece un obiect de bază de date în șablon și poate efectua o interogare. Dacă intenționează să facă acest lucru, nu există niciun motiv pentru a-i împiedica.

O situație diferită apare dacă doriți să oferiți clienților sau programatorilor externi posibilitatea de a edita șabloanele. În acest caz, cu siguranță nu doriți ca aceștia să aibă acces la baza de date. Bineînțeles, nu veți trece obiectul bazei de date în șablon, dar ce se întâmplă dacă acesta poate fi accesat prin intermediul unui alt obiect? Soluția este [modul sandbox |sandbox], care vă permite să definiți ce metode pot fi apelate în șabloane. Datorită acestui lucru, nu trebuie să vă faceți griji cu privire la breșele de securitate.


Care sunt principalele diferențe între sistemele de modelare precum Latte, Twig și Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade]
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Diferențele dintre sistemele de modelare precum Latte, Twig și Blade constau în principal în sintaxa, securitatea și integrarea cu cadrele:

- Latte: utilizează sintaxa limbajului PHP, ceea ce îl face mai ușor de învățat și de utilizat. Oferă o protecție de top împotriva atacurilor XSS.
- Twig: utilizează o sintaxă de tip Python, care este destul de diferită de cea a limbajului PHP. Evadează fără distincție de context. Este bine integrat cu cadrul Symfony.
- Blade: utilizează un amestec de sintaxă PHP și sintaxă personalizată. Evadează fără distincție de context. Este foarte bine integrat cu caracteristicile și ecosistemul Laravel.


Merită pentru companii să folosească un sistem de template-uri? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system]
-------------------------------------------------------------------------------------------------------------------------------

În primul rând, costurile asociate cu formarea, utilizarea și beneficiile generale variază semnificativ în funcție de sistem. Sistemul de modelare Latte, datorită utilizării sintaxei PHP, simplifică foarte mult învățarea pentru programatorii deja familiarizați cu acest limbaj. De obicei, unui programator îi sunt necesare câteva ore pentru a se familiariza suficient cu Latte, ceea ce reduce costurile de formare și accelerează adoptarea tehnologiei și, cel mai important, eficiența în utilizarea zilnică.

În plus, Latte oferă un nivel ridicat de protecție împotriva vulnerabilității XSS datorită tehnologiei sale unice de evadare conștientă de context. Această protecție este crucială pentru a asigura securitatea aplicațiilor web și pentru a minimiza riscul de atacuri care ar putea pune în pericol utilizatorii sau datele companiei. De asemenea, securitatea aplicațiilor web este importantă pentru menținerea bunei reputații a unei companii. Problemele de securitate pot duce la pierderea încrederii din partea clienților și pot afecta reputația companiei pe piață.

Utilizarea Latte reduce, de asemenea, costurile generale de dezvoltare și întreținere, facilitându-le pe ambele. Prin urmare, utilizarea unui sistem de modelare merită cu siguranță.


Afectează Latte performanța aplicațiilor web? .[#toc-does-latte-affect-the-performance-of-web-applications]
-----------------------------------------------------------------------------------------------------------

Deși șabloanele Latte sunt procesate rapid, acest aspect nu contează cu adevărat. Motivul este că analiza fișierelor are loc o singură dată în timpul primei afișări. Ele sunt apoi compilate în cod PHP, stocate pe disc și rulate la fiecare solicitare ulterioară, fără a necesita recompilare.

Acesta este modul în care funcționează într-un mediu de producție. În timpul dezvoltării, șabloanele Latte sunt recompilate de fiecare dată când conținutul lor se modifică, astfel încât dezvoltatorul vede întotdeauna versiunea curentă.

De ce să folosiți șabloane?

De ce ar trebui să folosesc un sistem de șabloane în PHP?

De ce să folosiți un sistem de șabloane în PHP când PHP însuși este un limbaj de creare de șabloane?

Să recapitulăm mai întâi pe scurt istoria acestui limbaj, care este plină de răsturnări de situație interesante. Unul dintre primele limbaje de programare utilizate pentru generarea de pagini HTML a fost limbajul C. Cu toate acestea, a devenit curând evident că utilizarea acestuia în acest scop era nepractică. Astfel, Rasmus Lerdorf a creat PHP, care a facilitat generarea de HTML dinamic cu ajutorul limbajului C în backend. PHP a fost conceput inițial ca un limbaj de modelare, dar în timp a dobândit caracteristici suplimentare și a devenit un limbaj de programare cu drepturi depline.

Cu toate acestea, el funcționează în continuare ca un limbaj de modelare. Un fișier PHP poate conține o pagină HTML, în care variabilele sunt afișate cu ajutorul funcției <?= $foo ?>, etc.

La începutul istoriei PHP, a fost creat sistemul de șabloane Smarty, cu scopul de a separa strict aspectul (HTML/CSS) de logica aplicației. Acesta a oferit în mod deliberat un limbaj mai limitat decât PHP însuși, astfel încât, de exemplu, un programator nu putea face o interogare a bazei de date dintr-un șablon etc. Pe de altă parte, a reprezentat o dependență suplimentară în proiecte, a crescut complexitatea acestora și a cerut programatorilor să învețe un nou limbaj Smarty. Astfel de beneficii au fost controversate, iar PHP simplu a continuat să fie folosit pentru șabloane.

Cu timpul, sistemele de șabloane au început să devină utile. Acestea au introdus concepte precum moștenirea, modul sandbox și o serie de alte caracteristici care au simplificat semnificativ crearea de șabloane în comparație cu PHP pur. Subiectul securității, existența unor vulnerabilități precum XSS și necesitatea de a evada a ajuns în prim-plan. Sistemele de șabloane au introdus auto-escaparea pentru a elimina riscul ca un programator să o uite și să creeze o gaură de securitate serioasă (vom vedea în scurt timp că acest lucru are anumite capcane).

Astăzi, beneficiile sistemelor de șabloane depășesc cu mult costurile asociate cu implementarea lor. Prin urmare, este logic să le folosim.

De ce este Latte mai bun decât Twig sau Blade?

Există mai multe motive – unele sunt plăcute, iar altele sunt extrem de utile. Latte este o combinație de plăcut și util.

În primul rând, plăcutul: Latte are aceeași sintaxă ca și PHP. Singura diferență este în notarea etichetelor, preferând mai scurte { și } în loc de <?= și ?>. Acest lucru înseamnă că nu trebuie să învățați un nou limbaj. Costurile de formare sunt minime. Cel mai important, în timpul dezvoltării, nu trebuie să „comutați“ în mod constant între limbajul PHP și limbajul șabloanelor, deoarece ambele sunt identice. Acest lucru este diferit de șabloanele Twig, care utilizează limbajul Python, ceea ce obligă programatorul să treacă de la un limbaj la altul.

Acum, pentru motivul extrem de util: Toate sistemele de șabloane, cum ar fi Twig, Blade sau Smarty, au evoluat pentru a include protecție împotriva XSS sub forma scăpării automate. Mai exact, apelarea automată a funcției htmlspecialchars(). Cu toate acestea, creatorii lui Latte și-au dat seama că aceasta nu este deloc soluția potrivită. Acest lucru se datorează faptului că diferite părți ale documentului necesită diferite metode de escaping. Escaparea automată naivă este o funcție periculoasă, deoarece creează un fals sentiment de securitate.

Pentru ca auto-escaping-ul să fie funcțional și fiabil, acesta trebuie să recunoască în ce parte a documentului sunt emise datele (numim aceste contexte) și să aleagă funcția de scăpare în consecință. Prin urmare, trebuie să fie sensibilă la context. Și asta este ceea ce poate face Latte. Înțelege HTML. Nu percepe șablonul ca pe un simplu șir de caractere, ci înțelege ce sunt etichetele, atributele etc. Prin urmare, el evadează diferit în textul HTML, în interiorul tag-urilor HTML, în interiorul JavaScript, etc.

Latte este primul și singurul sistem de șabloane PHP cu escaping sensibil la context. Acesta reprezintă singurul sistem de șabloane cu adevărat sigur.

Și un alt motiv plăcut: Deoarece Latte înțelege HTML, oferă și alte caracteristici foarte plăcute. De exemplu, n:attributes. Sau posibilitatea de a verifica legăturile. Și multe altele.

Ce înseamnă „escaping“?

Escaping-ul este un proces care presupune înlocuirea caracterelor cu semnificații speciale cu secvențe corespunzătoare atunci când se inserează un șir de caractere în altul pentru a preveni efectele nedorite sau erorile. De exemplu, atunci când se inserează un șir în textul HTML, în care caracterul < are o semnificație specială deoarece indică începutul unei etichete, îl înlocuim cu secvența corespunzătoare, care este entitatea HTML &lt;. Acest lucru permite browserului să afișeze corect simbolul <.

Un exemplu simplu de evadare directă la scrierea codului PHP este inserarea unui ghilimele într-un șir de caractere prin plasarea unei backslash în fața acestuia.

Discutăm mai detaliat despre escaping în capitolul Cum să vă apărați împotriva XSS.

Poate fi executată o interogare a unei baze de date dintr-un șablon Latte?

În șabloane, puteți lucra cu obiecte pe care programatorul le transmite. Dacă programatorul dorește, poate trece un obiect de bază de date în șablon și poate efectua o interogare. Dacă intenționează să facă acest lucru, nu există niciun motiv pentru a-i împiedica.

O situație diferită apare dacă doriți să oferiți clienților sau programatorilor externi posibilitatea de a edita șabloanele. În acest caz, cu siguranță nu doriți ca aceștia să aibă acces la baza de date. Bineînțeles, nu veți trece obiectul bazei de date în șablon, dar ce se întâmplă dacă acesta poate fi accesat prin intermediul unui alt obiect? Soluția este modul sandbox, care vă permite să definiți ce metode pot fi apelate în șabloane. Datorită acestui lucru, nu trebuie să vă faceți griji cu privire la breșele de securitate.

Care sunt principalele diferențe între sistemele de modelare precum Latte, Twig și Blade?

Diferențele dintre sistemele de modelare precum Latte, Twig și Blade constau în principal în sintaxa, securitatea și integrarea cu cadrele:

  • Latte: utilizează sintaxa limbajului PHP, ceea ce îl face mai ușor de învățat și de utilizat. Oferă o protecție de top împotriva atacurilor XSS.
  • Twig: utilizează o sintaxă de tip Python, care este destul de diferită de cea a limbajului PHP. Evadează fără distincție de context. Este bine integrat cu cadrul Symfony.
  • Blade: utilizează un amestec de sintaxă PHP și sintaxă personalizată. Evadează fără distincție de context. Este foarte bine integrat cu caracteristicile și ecosistemul Laravel.

Merită pentru companii să folosească un sistem de template-uri?

În primul rând, costurile asociate cu formarea, utilizarea și beneficiile generale variază semnificativ în funcție de sistem. Sistemul de modelare Latte, datorită utilizării sintaxei PHP, simplifică foarte mult învățarea pentru programatorii deja familiarizați cu acest limbaj. De obicei, unui programator îi sunt necesare câteva ore pentru a se familiariza suficient cu Latte, ceea ce reduce costurile de formare și accelerează adoptarea tehnologiei și, cel mai important, eficiența în utilizarea zilnică.

În plus, Latte oferă un nivel ridicat de protecție împotriva vulnerabilității XSS datorită tehnologiei sale unice de evadare conștientă de context. Această protecție este crucială pentru a asigura securitatea aplicațiilor web și pentru a minimiza riscul de atacuri care ar putea pune în pericol utilizatorii sau datele companiei. De asemenea, securitatea aplicațiilor web este importantă pentru menținerea bunei reputații a unei companii. Problemele de securitate pot duce la pierderea încrederii din partea clienților și pot afecta reputația companiei pe piață.

Utilizarea Latte reduce, de asemenea, costurile generale de dezvoltare și întreținere, facilitându-le pe ambele. Prin urmare, utilizarea unui sistem de modelare merită cu siguranță.

Afectează Latte performanța aplicațiilor web?

Deși șabloanele Latte sunt procesate rapid, acest aspect nu contează cu adevărat. Motivul este că analiza fișierelor are loc o singură dată în timpul primei afișări. Ele sunt apoi compilate în cod PHP, stocate pe disc și rulate la fiecare solicitare ulterioară, fără a necesita recompilare.

Acesta este modul în care funcționează într-un mediu de producție. În timpul dezvoltării, șabloanele Latte sunt recompilate de fiecare dată când conținutul lor se modifică, astfel încât dezvoltatorul vede întotdeauna versiunea curentă.