Filtrare le proprietà della nostra applicazione in relazione all'ambiente
Pagina 1 di 4
Iniziamo spiegando cosa intendiamo per filtering dinamico.
Con questa espressione ci riferiamo a quel meccanismo che permette di rendere disponibili alle nostre classi/script proprietà comuni filtrate però in relazione all'ambiente in cui stiamo lavorando (locale, test, produzione).
E' un meccanismo comune in Java ma non in PHP per il semplice motivo che il concetto di deploy, così come comunemente inteso, è poco associabile al nostro amato linguaggio. E' infatti piuttosto comune provare gli script in locale e poi copiare i files via ftp sulla macchina di test o (peggio) direttamente su quella di produzione.
In ambiente professionale, tuttavia, è molto comodo avere proprietà filtrate automaticamente a seconda che la nostra applicazione debba girare in localhost o su altre macchine ( ad esempio quelle di frontend, esposte all'esterno), quindi in questo articolo creeremo una semplice infrastruttura per implementare questo tipo di logica all'interno di un nostro ipotetico progetto PHP.
Per fare ciò non utilizzeremo pacchetti esterni, né particolari astrazioni, ci basterà un xml, una classe PHP e dei file di testo.
L'idea è quella di definire nel file xml le nostre proprietà comuni, creare un file per ogni ambiente per valorizzarle e scrivere un pò di codice che mette insieme il tutto. La struttura della nostra applicazione di prova sarà questa:
- una cartella classes contenente la classe PropertyManager.class.php
- una cartella config con all'interno il file app_properties.xml e una cartella filters
- la cartella filters contenente tre file: local.filter.properties, test.filter.properties, pro.filter.properties
- un file PHP con il codice per testare il funzionamento della nostra soluzione: index.php
Ecco la struttura di base:

L'xml
Vediamo come si compone il file:
<?xml version="1.0" encoding="utf-8" ?> <properties> <property name="__app_version" value="0.0.1" /> <property name="messaggio_variabile" value="" /> <property name="url_servizio_esterno" value="" /> <property name="local" value="localhost" /> <property name="test" value="test.qualchedominio.it" /> <property name="pro" value="prod.qualchedominio.it" /> </properties>
Oltre al solito tag xml che inizia il documento definiamo un tag contenitore <properties> dentro il quale inseriamo una serie di tag <property>; i primi tre sono quelli che ci serviranno nell'esempio, gli ultimi tre sono riferiti ai vari host e serviranno a PHP per capire dinamicamente in quale ambiente stiamo operando.
Qui abbiamo deinito gli ambienti locale, test e produzione, ma nulla vieta di definirne altri, ad esempio dev. Per ognuno degli ambienti è indicato un URL di base, che valorizzeremo a seconda delle nostre esigenze, applicazione per applicazione.
Nel nostro scenario abbiamo una macchina di test raggiungibile all' URL test.qualchedominio.it e una di produzione raggiungibile all'indirizzo prod.qualchedominio.it oltre ovviamente a localhost.
I file .*properties
Il passo successivo è fare in modo che le properties definite nell'xml vengano valorizzate in maniera diversa a seconda dell' ambiente in cui ci troviamo. Ci serviamo a questo scopo di files di testo contenuti nella cartella filters, vediamone il contenuto ad uno ad uno:
local.filter.properties
; [ LOCAL ] Filter properties messaggio_variabile="Siamo in LOCALE" url_servizio_esterno=http://dev-servizio.esterno.it
test.filter.properties
; [ TEST ] Filter properties messaggio_variabile="Siamo in TEST" url_servizio_esterno=http://test-servizio.esterno.it
pro.filter.properties
; [ PRO ] Filter properties messaggio_variabile="Siamo in PRODUZIONE" url_servizio_esterno=http://prod-servizio.esterno.itit
Notate che la property "__app_version", definita nell'xml, non è ridefinita nei vari files, sarà infatti trattata a tutti gli effetti come una proprietà comune e immutabile tra i vari ambienti, quindi non verrà filtrata.







