Tutorial su come creare un PHP Template Engine
Pubblicato il 31 Maggio 2018
Un bravo developer conosce l’importanza di separare la logica dalla presentazione all’interno di un’applicazione web. Come previsto nel pattern MVC, questa separazione, delega al web designer la realizzazione dei templates e della presentazione consentendo al web developer di concentrarsi sulla logica di business. Permette, inoltre, una migliore collaborazione e manutenzione del progetto.
Esistono diversi template engine per PHP, probabilmente, il più famoso è Smarty. Altri apprezzati sono Plates e Dwoo. La decisione di adottare un template engine deve essere presa dopo un’attenta valutazione. Il rischio principale è di peggiorare inutilmente le prestazioni dell’applicazione, in seconda battuta, si dovranno adottare nuove opzioni e sintassi previste dalla libreria scelta.
La realizzazione di un template engine è relativamente semplice: vediamo come realizzarlo con una classe ad-hoc che si occupa di renderizzare le variabili individuabili nel codice HTML grazie a dei marcatori scelti a piacimento.
Per il nostro tutorial, il marcatore scelto per delimitare le variabili, è la doppia parentesi graffa. Questo il nostro codice HTML:
Hi {{name}}, welcome in my personal template engine.
La nostra classe, sostanzialmente, si occupa di caricare il file HTML e sostituire le variabili con la funzione str_replace. Vediamola nel dettaglio:
class Template {
protected $file;
protected $values = array();
public function __construct($file) {
$this->file = $file;
}
public function set($key, $value) {
$this->values[$key] = $value;
}
public function render() {
if (!file_exists($this->file)) {
return "Error loading file: " .$this->file .".";
}
$html = file_get_contents($this->file);
foreach ($this->values as $key => $value) {
$replace = "{{" .$key ."}}";
$html = str_replace($replace, $value, $html);
}
return $html;
}
}
Per poterla utilizzare sarà sufficiente includerla specificando il file da caricare, indicare la variabile presente nel codice con la funzione set e renderizzare il contenuto con la funzione render:
include("template.php");
$template = new Template("file.html");
$template->set("name", "Emanuele");
echo $template->render();
Al prossimo tutorial 😉
Pubblicato in: