Sintaksa
Syntax Latte je nastal zaradi praktičnih zahtev spletnih oblikovalcev. Iskali smo uporabniku najbolj prijazno sintakso, s katero lahko elegantno zapišete konstrukcije, ki so sicer pravi izziv. Hkrati so vsi izrazi zapisani popolnoma enako kot v jeziku PHP, zato se vam ni treba učiti novega jezika. Preprosto kar najbolje izkoristite tisto, kar že poznate.
Spodaj je minimalna predloga, ki ponazarja nekaj osnovnih elementov: oznake, n:atribute, komentarje in filtre.
{* to je komentar *}
<ul n:if="$items"> {* n:if je n:atribut *}
{foreach $items as $item} {* oznaka, ki predstavlja zanko foreach *}
<li>{$item|capitalize}</li> {* oznaka, ki izpiše spremenljivko s filtrom *}
{/foreach} {* konec cikla *}
Podrobneje si oglejmo te pomembne elemente in kako vam lahko pomagajo zgraditi neverjetno predlogo.
Oznake
Predloga vsebuje oznake, ki nadzorujejo logiko predloge (na primer zanke foreach) ali izhodne izraze. Za oboje se
uporablja en sam razmejitveni znak { ... }
, zato vam ni treba razmišljati o tem, kateri razmejitveni znak uporabiti
v kateri situaciji, kot je to v drugih sistemih. Če znaku {
sledi narekovaj ali presledek, ga Latte ne obravnava
kot začetek oznake, zato lahko v predlogah brez težav uporabljate konstrukcije JavaScript, JSON ali pravila CSS.
Oglejte si pregled vseh oznak. Poleg tega lahko ustvarite tudi oznake po meri.
Latte razume PHP
Znotraj oznak lahko uporabite izraze PHP, ki jih dobro poznate:
- spremenljivke
- nizov (vključno s HEREDOC in NOWDOC), polj, števil itd.
- operatorji
- klice funkcij in metod (ki so lahko omejeni s peskovnikom)
- ujemanje
- anonimne funkcije
- povratni klici
- večvrstični komentarji
/* ... */
- itd.
Poleg tega Latte dodaja več lepih razširitev sintakse PHP.
n:atributi
Vsako parno oznako, kot je {if} … {/if}
, ki deluje na posamezen element HTML, lahko zapišemo v zapisu n:atribut. Na primer, {foreach}
iz zgornjega primera je mogoče zapisati tudi na
ta način:
<ul n:if="$items">
<li n:foreach="$items as $item">{$item|capitalize}</li>
</ul>
Funkcija nato ustreza elementu HTML, v katerem je zapisana:
{var $items = ['I', '♥', 'Latte']}
<p n:foreach="$items as $item">{$item}</p>
Izpisi:
<p>I</p>
<p>♥</p>
<p>Latte</p>
Z uporabo predpone inner-
lahko spremenimo obnašanje tako, da funkcionalnost velja samo za telo elementa:
<div n:inner-foreach="$items as $item">
<p>{$item}</p>
<hr>
</div>
Izpisi:
<div>
<p>I</p>
<hr>
<p>♥</p>
<hr>
<p>Latte</p>
<hr>
</div>
S predpono tag-
se funkcionalnost uporablja samo za oznake HTML:
<p><a href="{$url}" n:tag-if="$url">Title</a></p>
Glede na vrednost spremenljivke $url
se izpiše:
// when $url is empty
<p>Title</p>
// when $url equals 'https://nette.org'
<p><a href="https://nette.org">Title</a></p>
Vendar pa n:atributi niso le bližnjica za parne oznake, temveč obstajajo tudi nekateri čisti n:atributi, na primer koderjev najboljši prijatelj n:class.
Filtri
Oglejte si povzetek standardnih filtrov.
Latte omogoča klicanje filtrov z uporabo zapisa z znakom pipe (pred njim je dovoljen presledek):
<h1>{$heading|upper}</h1>
Filtri se lahko verižijo, v tem primeru se uporabljajo po vrstnem redu od leve proti desni:
<h1>{$heading|lower|capitalize}</h1>
Parametri so navedeni za imenom filtra, ločeni z dvopičjem ali vejico:
<h1>{$heading|truncate:20,''}</h1>
Filtre je mogoče uporabiti na izrazu:
{var $name = ($title|upper) . ($subtitle|lower)}
Na bloku:
<h1>{block |lower}{$heading}{/block}</h1>
Ali neposredno na vrednosti (v kombinaciji z {=expr}
oznako):
<h1>{=' Hello world '|trim}<h1>
Komentarji
Komentarji so zapisani na ta način in se ne vključijo v izpis:
{* to je komentar v Latte *}
Komentarji PHP delujejo znotraj oznak:
{include 'file.info', /* value: 123 */}
Sintaktični sladkor
Nizi brez narekovajev
Za preproste nize lahko izpustite narekovaje:
as in PHP: {var $arr = ['hello', 'btn--default', '€']}
abbreviated: {var $arr = [hello, btn--default, €]}
Enostavni nizi so tisti, ki so sestavljeni izključno iz črk, številk, podčrtank, pomišljajev in pik. Ne smejo se začeti
s številko in ne smejo se začeti ali končati s pomišljajem. Ne smejo biti sestavljeni samo iz velikih črk in podčrtajev,
ker se potem štejejo za konstanto (npr. PHP_VERSION
). In ne sme biti v koliziji s ključnimi besedami
and
, array
, clone
, default
, false
, in
,
instanceof
, new
, null
, or
, return
, true
,
xor
.
Kratek terminarni operator
Če je tretja vrednost ternarnega operatorja prazna, jo lahko izpustite:
as in PHP: {$stock ? 'In stock' : ''}
abbreviated: {$stock ? 'In stock'}
Sodobni zapis ključev v polju
Ključe polja lahko zapišete podobno kot poimenovane parametre pri klicanju funkcij:
as in PHP: {var $arr = ['one' => 'item 1', 'two' => 'item 2']}
modern: {var $arr = [one: 'item 1', two: 'item 2']}
Filtri
Filtre lahko uporabite za katerikoli izraz, samo celoten izraz zapišite v oklepaj:
{var $content = ($text|truncate: 30|upper)}
Operator in
Operater in
se lahko uporablja za zamenjavo funkcije in_array()
. Primerjava je vedno stroga:
{* like in_array($item, $items, true) *}
{if $item in $items}
...
{/if}
Izbirno veriženje z operatorjem z nedefinirano varnostjo
Operator undefined-safe ??->
je podoben operatorju nullsafe ?->
, vendar ne sproži napake, če
spremenljivka, lastnost ali indeks sploh ne obstajajo.
{$order??->id}
to je način, kako povedati, da ko je $order
definiran in ni null, se bo izračunal $order->id
, ko
pa je $order
null ali ne obstaja, prenehamo s tem, kar počnemo, in preprosto vrnemo null.
Morda boste z uporabo ?->
nadomestili veliko kode, ki izvaja ponavljajoče se preverjanje ničelnosti:
{$user??->address??->street}
// roughly means isset($user) && isset($user->address) ? $user->address->street : null
Okno v zgodovino
Latte je v svoji zgodovini ponudil številne sintaktične bonbončke, ki so se nekaj let pozneje pojavili tudi v samem jeziku
PHP. V Latte je bilo na primer mogoče zapisati polja kot [1, 2, 3]
namesto array(1, 2, 3)
ali
uporabiti operator nullsafe $obj?->foo
veliko prej, preden je bilo to mogoče v samem PHP. Latte je uvedel tudi
operator za razširitev polj (expand) $arr
, ki je enakovreden današnjemu operatorju ...$arr
iz PHP.
Omejitve PHP v Latte
V Latte je mogoče zapisati samo izraze PHP. To pomeni, da ne morete deklarirati razredov ali uporabljati kontrolnih struktur, kot so if
,
foreach
, switch
, return
, try
, throw
in druge, namesto katerih
Latte ponuja svoje oznake. Prav tako ne morete uporabljati atributov, zaklepajev ali čarobnih konstant, ker to ne bi bilo smiselno. Ne morete
uporabljati niti echo
, include
, require
, exit
, eval
,
unset
, ker to niso funkcije, temveč posebni konstrukti jezika PHP in zato niso izrazi.
Vendar lahko te omejitve obidete tako, da aktivirate razširitev RawPhpExtension, ki vam omogoča uporabo katere koli kode PHP
v oznaki {php ...}
na odgovornost avtorja predloge.