codice PHP in template FatFree
-
25-10-2019 - |
Domanda
Sto cercando di lavorare con quadro FatFree e cercando di utilizzare il motore di template. I rendere il modello con il seguente codice -
echo Template::serve('template.php');
Il problema che sto affrontando è che, all'interno del file template.php F3 tag vengono riconosciuti, ma qualsiasi codice PHP non funziona. Per esempio, se ho il seguente codice nel file template.php -
<?php
if (F3::get('var') == 'var1') {
?>
<span>var1 is present</span>
<?php
} else {
?>
<span>var1 not present</span>
<?php
}
?>
Qui sia var1 is present
e var1 not present
viene stampato indipendentemente dal valore di var. Inoltre, php per i cicli non funzionano -. Quindi, in pratica tutto il codice PHP non funziona
Tuttavia, se ho usato <F3:check>
di scrivere il codice PHP sopra, allora tutto funziona bene. Non possiamo usare codice PHP nei template. Se questo è il caso, questa è una limitazione seria.
Soluzione
Ho trovato la risposta, anche se non mi piace molto.
Ci sono due funzioni diverse, F3::render()
e Template::serve()
Con F3::render()
è possibile valutare le espressioni PHP e utilizzare il F3::get()
per recuperare le variabili. Secondo il sito web: "The only issue with embedding PHP code in your templates is the conscious effort needed to stick to MVC principles"
Il Template::serve()
è per templating solo. Significato suo semplicemente per elaborare il linguaggio di templating.
Quindi, in pratica, e sì fa schifo e non ha senso, si può valutare il codice PHP nel F3::render()
e non è possibile utilizzare le variabili templating ({{@var}}
) -OPPURE- è possibile utilizzare Template::serve()
e si sono limitati a solo chiamando funzioni PHP, e non realmente valutare codice PHP.
Altri suggerimenti
Forse provare a utilizzare diversi template engine che vi permetterà di definire più facile la dipendenza blocchi variabili?
Per esempio in PHPTal http://phptal.org/manual/en/ dividere / tal-condition.html si può fare così:
<div tal:condition="php: var == 'var1'">
....
</div>
E 'non documentata, ma è possibile inserire il codice all'interno di {~ ~}
in un modello e sarà convertito in <?php ?>
quando il modello viene compilato (usando v3.6).
es. {~ @color = 'red' ~}
diventerà <?php $color = 'red' ?>