Su October possiamo estendere facilmente il template engine Twig aggiungendo filtri e funzioni personalizzare in modo molto semplice.
Sia funzioni che filtri personalizzati possono essere registrati nella classe Plugin tramite il metodo registerMarkupTags
In questo esempio registriamo un nuovo filtro (octoberize) e una nuova funzione (branding)
use System\Classes\PluginBase;
use Config;
class Plugin extends PluginBase
{
public function registerMarkupTags()
{
return [
'filters' => [
'octoberize' => [$this, 'octoberizeFilter']
],
'functions' => [
'branding' => [$this, 'brandingFunction'],
]
];
}
public function octoberizeFilter($text){
return 'Questo testo è stato Octoberizzato! ' . $text;
}
public function brandingFunction($value){
return Config::get($value);
}
}
Come vediamo, in completo stile October, è tutto piuttosto semplice e intuitivo, ora possiamo già utilizzare il nostro filtro in questo modo
{{ 'Il mio testo' | octoberize }}
che verrà renderizzato in:
Questo testo è stato Octoberizzato! Il mio testo
Come vediamo il testo passato al filtro è la variabile $text attesa dalla funzione octoberizeFilter chiamata dal filtro octoberize
In modo analogo possiamo chiamare la funzione branding passando l'argomento desiderato
{{ branding('app.name') }}
Anche in questo caso app.name sarà il valore di $value atteso dalla funzione brandingFunction chiamata dalla funzione (di Twig) branding
In entrambi i casi visti sopra chiamiamo una funzione locale usando $this come primo argomento dell'array che definisce il nuovo filtro e funzione di Twig, ma in realtà possiamo chiamare anche funzioni globali come ad esempio
'filters' => [
'cammellizza' => 'camel_case'
]
Possiamo passare il namespace completo della classe da invocare e come secondo parametro il metodo che andremo ad esguire che anche in questo caso riceverò come parametro/i i valori passati nel template
'functions' => [
'config_get' => ['October\Rain\Support\Facades\Config', 'get']
]
che potremo utilizzare nel tempalte come di consueto:
{{ config_get('app.name') }}
Un'ulteriore possibilità è quella di utilizzare una funzione anonima inline
'functions' => [
'saluti' => function() { return 'Ciao Mondo!'; }
]
Naturalmente uno non esclude l'altro quindi il codice completo del nostro metodo registerMarkupTags sarà:
use System\Classes\PluginBase;
use Config;
class Plugin extends PluginBase
{
public function registerMarkupTags()
{
return [
'filters' => [
'octoberize' => [$this, 'octoberizeFilter']
],
'functions' => [
'branding' => [$this, 'brandingFunction'],
'config_get' => ['October\Rain\Support\Facades\Config', 'get'],
'saluti' => function() { return 'Ciao Mondo!'; }
]
];
}
public function octoberize($text){
return 'Questo testo è stato Octoberizzato! ' . $text;
}
public function brandingFunction($value){
return Config::get($value);
}
}
Questo è tutto, ora non ci resta che espandere Twig con tutti i filtri e funzioni che ci servono e riutilizzarle facilmente da un progetto all'altro magari creando un plugin apposito che li riunisce tutti quanti.
Buon October a tutti!
Lunga vita e prosperità