Vorrei includere nel mio progetto yii (o meglio, in tutti i miei progetti yii) la libreria tcpdf per la generazione di pdf.
Per il funzionamento non ho problemi, ho già letto alcuni articoli e mi sono stati molto utili ma ho alcuni dubbi riguardo la struttura delle cartelle di Yii
La domanda è questa: secondo la logica delle cartelle di Yii dove è più corretto copiare i files della libreria tcpdf?
Nella ./YiiFramework/vendors/?
Nella ./MyProject/protected/vendors/? (tra l’altro questa cartella non esiste nel progetto auto.generato da yiic, dovrei crearla)
Nella ./MyProject/protected/components/?
Sono alle prime armi con lo studio di questo bellissimo framework e ancora non mi sono chiare alcune cose. Vorrei però capirne la logica corretta.
Quindi ti chiedo un’altra conferma. Se copio la libreria di funzioni sotto la ./MyProject/Vendors/ posso importarla nel mio progetto aggiungendo (nel file di configurazione) una riga con
Facendo delle ulteriori ricerche e prove ho trovato una soluzione "abbastanza pulita" per fare quello che avevo in mente, cioè installare una estensione a livello di core di Yii in modo da poterla riutilizzare con tutti i progetti Yii sullo stesso web server.
Vorrei condividerla con voi nel caso possa tornare utile a qualcuno oppure per muovere critiche e suggerimenti (che sono sempre ben accetti).
Scenario: devo integrare un’estensione di terze parti con Yii (in questo caso tcpdf) e referenziarla per poterla utilizzare con tutti i progetti. Voglio inoltre referenziare inoltre il nome della sua classe principale (class TCPDF) con l’utilizzo di Class Map
1 - Copio la cartella contenente i files dell’estensione tcpdf sotto ./YiiFramework/vendors/tcpdf/
2 - Nel file di configurazione (main.php) aggiungo un percorso per l’import
'import'=>array(
'system.vendors.tcpdf.*',
),
3 - nel file index.php aggiungo il seguente spezzone di codice (questo codice va messo tra require_once($yii); e Yii::createWebApplication($config)->run();)
Mi è appena venuto un dubbio. Ma è possibile mettere le estensioni dentro yii e non dentro alla singola applicazione? Mi spiego: se ho 10 siti web che usano TinyMCE, estendo i 10 siti o metto l’editor direttamente dentro a Yii?
Poi: che problemi possono saltare fuori? A me in questo momento viene in mente l’aggiornamento. Quando aggiorno basta che ricopio le estensioni?
Ho copiato la mia estensione nella cartella vendors della Yii (quella che io ho chiamato YiiFramework e che contiene il framework Yii) e, da ogni applicazione, punto a questa. Mi vengono in mente questi vantaggi/svantaggi di utilizzare questa configurazione:
[i][b]
[/b][/i]Vantaggi
Copio l’estensione una sola volta. Se avessi 10 applicazioni dovrei copiare la stessa estensione nei folder di ogni applicazione (sempre che mi serva utilizzarla in tutte)
Se devo aggiornare l’estensione basta che la aggiorno una volta sola e l’aggiornamento verrà apportato su tutte le applicazioni che puntano a questa cartella
Svantaggi
Se devo aggiornare la nuova versione di Yii mi devo ricordare di copiare tutte le estensioni precedentemente integrate altrimenti non funzionerà in nessuna applicazione.
Hai fatto bene a farmi notare questa cosa. Devo segnarmi tutte le modifiche che faccio alla Yii in previsione di un futuro cambio di versione. Sicuramente mi dimenticherò qualcosa…