Scenario
Un filtro di Doctrine è uno strumento molto potente che può essere utilizzato per aggiungere condizioni a livello SQL all’interno del nostro gestore di oggetti Doctrine 2. Ciò significa che i filtri influenzeranno il comportamento di query DQL, collezioni, recupero dati, ecc.
Come configurare ed utilizzare filtri in condizioni generali è ben spiegato in questo questo articolo della documentazione officiale di Doctrine, ma in un progetto basato su Zend Framework 2, la stessa operazione è un po’ diversa.
Così, in questo articolo, vedremo come configurare uno o più filtri nei nostri progetti sviluppati su Zend Framework 2.
Esempio esplicativo
Il seguente esempio è basato su quello riguardante un filtro “locale” mostrato nel manuale di Doctrine. Assumeremo di avere un progetto ZF2 funzionante sviluppato a partire da ZendSkeletonApplication con il modulo DoctrineORMModule configurato (fare riferimento ai manuali ufficiali per raggiungere questo obiettivo).
Innanzitutto, abbiamo bisogno di una classe interfaccia da utilizzare come segno distintivo per decidere quali entità saranno influenzate dal filtro. Quindi, se vorremo che un filtro sia applicato ad un’entità dovremo solo fargli implementare tale interfaccia. Ovviamente, possiamo anche utilizzare l’interfaccia per specificare quali metodi implementare nell’entità, se vogliamo. Questo può essere utile e vedremo un esempio in un prossimo articolo.
/module/Application/src/Application/DoctrineFilter/MyLocaleFilterInterface.php:
|
|
Essenzialmente, la definizione del filtro è identica a quella necessaria per l’utilizzo con Doctrine senza ZF2. Dobbiamo solo fare attenzione a dove posizionare il file e correggere i namespace:
/module/Application/src/Application/DoctrineFilter/MyLocaleFilter.php:
|
|
A questo punto, iniziano le vere differenze: per configurare il filtro, utilizzeremo il file di configurazione del modulo ZF2 invece del metodo addFilter() (come descritto nel manuale ufficiale). Quindi aggiungiamo le seguenti linee in module.config.php:
/module/Application/config/module.config.php:
|
|
Ora che il nostro nuovo filtro è configurato, possiamo attivarlo e disattivarlo da qualsiasi classe che implementi l’interfaccia ServiceManagerAwareInterface, aggiungendovi due semplici metodi come questi:
|
|
Se vogliamo, invece, attivare il filtro durante la fase di bootstrap, possiamo aggiungere le seguenti linee di codice nel file Module.php:
/module/Application/Module.php:
|
|
E questo è tutto. D’ora in poi, quando il filtro “my_locale” è attivo, ciascuna entità coinvolta in query o caricamento di collezioni, verrano filtrati con le condizioni specificate nella classe filtro e i valori passati con il metodo setParameter(). Con poche linee di codice possiamo avere filtri completamente integrati nel progetto ZF2.
See also
- How to setup Docker container with legacy PHP 5.6 and Xdebug
- Split, reduce and convert PDF to JPEG using PHP ImageMagick
- Quickly setup HTTPS on PHP Apache2 Docker container with self-signed SSL certificate
- Building ZF3 composed pages using Nesting View Models and Forward Controller Plugin
- How to inject Zend Service Manager in ZF3 Controllers