Creare Proprie Librerie
Quando viene utilizzato il termine "Librerie", solitamente ci riferiamo alle classi che sono presenti nella directory LIBRARIES e descritte nella guida nella sezione "Le Classi". In questo caso, comunque, intendiamo descrivere come è possibile creare proprie librerie all'interno della directory application/libraries così da mantenere separate le proprie risorse locali rispetto alle risorse del framework.
CodeIgniter permette di estendere le classi native se si necessita semplicemente di aggiungere una o più funzionalità a quella esistente. Oppure è possibile sostituirne una creando una classe con lo stesso nome nella cartella application/libraries.
Riassumendo:
- E' possibile creare nuove librerie;
- E' possibile estendere le librerie native;
- E' possibile sovrascrivere le librerie native.
Di seguito verranno sviluppati in dettagli i tre concetti appena esposti.
Note: La classe Database non può essere "estesa" o sovrascritta, così come la classe Loader in PHP 4. Tutte le altre classi potranno essere sovrascritte/estese.
Salvataggio
Le proprie librerie dovranno essere poste all'interno della cartella application/libraries, dove CodeIgniter le andrà a cercare quando saranno inizializzate.
Convenzione sui Nomi
- I nomi dei file devono iniziare con la lettera maiuscola. Per esempio: Myclass.php
- La dichiarazione della Classe deve essere con la lettera maiuscola. Per esempio: class Myclass
- Il nome della classe ed il nome del file deve essere identico.
The Class File
Le Classi dovrebbero avere la seguente struttura (Nota: Stiamo usando il nome Someclass solo come puro esempio):
Usare le proprie classi
All'interno di ogni funzione dei tuoi Controller è possibile inizializzare le proprie classi usando lo standard:
Dove someclass è il nome del file, senza l'estensione ".php". E' possibile nominare il file sia con lettere maiuscole che con quelle minuscole. CodeIgniter non ci farà caso.
Una volta caricata, sarò possibile accedere alla propria classe usando la versione a lettere minuscole :
Passare Parametri all'inizializzazione della Classe
Nella funzione di caricameto è possibile passare valori attraverso un array, come secondo parametro. Questi verranno passati al costruttore della classe:
Se si utilizza questa funzionalità sarà necessario impostare il costruttore affinché possa ricevere i dati aspettati:
E' possibile passare i parametri attraverso un file di configurazione. Questo è possibile semplicemente creando un file che abbia lo stesso nome del file che contiene la classe e salvarlo nella cartella application/config/. Nota che se si vuole passare i parametri come descritto in precedenza, l'opzione del file di configurazione non sarà disponibile.
Utilizzare le Risorse di CodeIgniter Resources all'interno delle proprie librerie
Per accedere alle risorse native di CodeIgniter all'interno delle proprie librerie sarà necessario utilizzare la funzione get_instance(). Questa funzione restituirà il super oggetto CodeIgniter.
Normalmente all'interno delle funzioni dei propri controller sarà possibile richiamare ogni funzione disponibile di CodeIgnitery utilizzando il costrutto $this:
$this, tuttavia, funziona solo all'interno dei tuoi controllers, o models, o views. Se si vuole usare le classi di CodeIgniter all'interno delle proprie classi sarà necessario procedere come descritto di seguito:
Primo, assegnare l'oggetto CodeIgniter ad una variabile:
Una volta assegnato l'oggetto alla variabile, si userà la variabile al posto di $this:
Note: Come avrai notato sopra, la funzione get_instance è passata per reference:
Questo è molto importante. L'assegnazione per referece ti permette di usare l'oggetto originale di CodeIgniter invece che creare una sua copia.
Altra cosa importante: se si sta adoperando PHP 4 è bene evitare di richiamare get_instance() all'interno della classe costruttore. PHP 4 ha delle difficoltà a referenziare il super oggetto CI all'interno dei costruttori fino a che l'intera classe non è completamente istanziata.
Sostituire Librerie Native con le Proprie Versioni
Semplicemente nominando i file contenenti le proprie classi con lo stesso nome dei file delle librerie, sarà possibile indurre CodeIgniter ad utilizzare le vostre librerie invece delle proprie. Per utilizzare questa funzionalità si deve nominare il file e la dichiarazione della classe nello stesso identico modo rispetto a quelle native. Per esempio, per sostituire la classe nativa Email, occorrerà creare un file chiamato application/libraries/Email.php, e dichiarare la sua classe con:
Nota che la gran parte delle classi native hanno il prefisso CI_.
Per caricare la propria libreria si utilizzerà la funzione standard:
Nota: La classe Database non può essere sostituita con una versione propria.
Estendere le librerie native
Se si necessita di aggiungere alcune funzionalità alle librerie esistenti - magari una o due funzioni - potrebbe essere non necessario sovrascrivere l'intera libreria. In questo caso potrebbe essere più semplice estendere la classe. Estendere una classe è un processo simile a quello di sostituirla, ad eccezione di un paio di steps:
- La dichiarazione della classe deve estendere la classe genitore.
- La tua nuova classe e il nome del file deve avere il prefisso MY_ (Questo è configurabile, come puoi vedere di seguito).
Per esempio, per estendere la classe nativa EMAIL sarà necessario creare un file nominato application/libraries/MY_Email.php, e dichiarare la classe nel seguente modo:
Note: Se si necessita di un costruttore nella propria classe, sarà necessario estendere il costruttore padre:
Caricare le proprio Sub-classi
Per caricare le proprie sub-classi sarà necessario utilizzare la sintassi standard. NON USARE il proprio prefisso. Per esempio, per caricare l'esempio precedente, che estendeva la classe Email, si userà:
Una volta caricato sarà possibile utilizzare normalmente funzioni e variabili della classe. Nela case della classe Email si userà:
Configurare il proprio Prefisso
Per configurare il proprio prefisso per le sub-classi, occorre apreire il file application/config/config.php e visualizzare la seguete riga:
Da notare che tutte le librerie native di CodeIgniter hanno il prefisso CI_ così questo profisso NON PUO' ESSERE UTILIZZATO.
Ultimo aggiornamento ( Domenica 29 Agosto 2010 05:53 )



