Come gestire più applicazioni in CodeIgniter

Oggi esamineremo come è possibile gestire più applicazioni nel framework Web CodeIgniter utilizzando un singolo codebase. Nel corso di questo, procederemo e creeremo due diverse applicazioni CodeIgniter che condivideranno il codice codebase principale Codebase.

La condivisione della base di codice principale tra diverse applicazioni non è qualcosa di nuovo in quanto è già praticata da diversi framework e sistemi open-source, e CodeIgniter non è diverso. Ti consente di gestire facilmente più applicazioni che condividono la libreria CodeIgniter e i file API principali e allo stesso tempo puoi utilizzare diversi database e configurazioni specifiche del sito.

Per iniziare, trarremo i benefici della configurazione multisito e, procedendo, passeremo attraverso una dimostrazione pratica di ciò che serve per configurare più applicazioni nel framework CodeIgniter.

Vantaggi dell'installazione multisito

In questa sezione, evidenzieremo un paio di vantaggi derivanti dall'avere una configurazione multisito.

Uno dei vantaggi più ovvi che ho potuto subito sottolineare è che l'impostazione multisito condivide un codice base comune e che dovrebbe rendere molto più semplici i processi di aggiornamento e manutenzione della tua applicazione.

Ad esempio, immaginiamo di avere dieci diverse applicazioni CodeIgniter in esecuzione. E sei appena venuto a sapere che una nuova versione del framework CodeIgniter è disponibile per l'aggiornamento e vorresti aggiornarlo il prima possibile per assicurarti che il codice rimanga sicuro e stabile.

Se avessi una base di codice separata per ciascuna delle tue applicazioni, sarebbe sicuramente un processo noioso passare attraverso ogni sito e aggiornarlo a sua volta. Con l'impostazione multisito, è sufficiente farlo una volta poiché il codice base principale è condiviso su tutti i siti!

Successivamente, consente di utilizzare un database diverso per ciascuna applicazione anche se condividono una base di codice comune. In realtà, è uno dei casi più comuni di utilizzo per la creazione di siti multisito!

Oltre all'utilizzo di un database diverso per ogni applicazione, è possibile creare una configurazione che utilizza lo stesso database ma un diverso tema o layout nel front-end.

Se stai ancora utilizzando l'approccio basato su FTP per spostare i file del tuo sito sui diversi server, direi che ti piacerà l'approccio multisito in quanto riduce al minimo il tuo lavoro!

Come creare più applicazioni

In questa sezione, imposteremo la struttura di base della directory per implementare una configurazione multisito.

Alla radice dell'applicazione CodeIgniter, creare un file applicazioni directory. Questa è la directory principale che terrà le nostre diverse applicazioni.

Quindi, andare avanti e creare due nuove directory-Applicazioni / app_one e Applicazioni / app_two. Certo, potresti chiamarlo come vuoi tu, ma per il momento manterrò le cose semplici.

Quindi, come puoi vedere, imposteremo due diverse applicazioni che utilizzeranno la base di codice singola del framework CodeIgniter. Sebbene l'impostazione multisito riutilizzi la maggior parte dei file framework CodeIgniter, dobbiamo ancora duplicare un paio di file e directory in ogni singola applicazione che creiamo.

Consentitemi di elencare rapidamente i file e le directory che dovreste copiare dall'applicazione predefinita in primo luogo.

Copia le seguenti directory dalla directory dell'applicazione predefinita a Applicazioni / app_one e Applicazioni / app_two:

  • nascondiglio
  • config
  • logs

Come puoi vedere, è ovvio avere directory separate per nascondiglio e logs per ogni applicazione. E il config directory è un must per il funzionamento della tua applicazione CodeIgniter, quindi lo copiamo comunque.

Successivamente, copiamo un paio di file insieme alle directory necessarie che ci consentono di testare la nostra applicazione multisito.

Copia i seguenti file sul nostro app_one e app_two applicazioni dall'applicazione predefinita CodeIgniter:

  • controllori / welcome.php
  • Visto / errori
  • views / welcome_message.php

Per il tuo riferimento rapido, il controllori / welcome.php il file dovrebbe essere simile a:

 * @see https://codeigniter.com/user_guide/general/urls.html * / public function index () $ this-> load-> view ('welcome_message'); 

E il views / welcome_message.php il file dovrebbe essere simile.

    Benvenuto in CodeIgniter    

Benvenuto in CodeIgniter! Stai visualizzando l'applicazione 1!

La pagina che stai guardando viene generata dinamicamente da CodeIgniter.

Se desideri modificare questa pagina, la troverai all'indirizzo:

application / views / welcome_message.php

Il controller corrispondente per questa pagina si trova su:

application / controller / Welcome.php

Se stai esplorando CodeIgniter per la prima volta, dovresti iniziare leggendo la Guida dell'utente.

Pagina resa in tempo trascorso secondi. '. CI_VERSION. '': "?>

Ovviamente, dovresti cambiare il seguente messaggio nel file di visualizzazione in modo da poter differenziare l'applicazione durante il test.

Per Applicazioni / app_one / views / welcome_message.php, dovrebbe assomigliare a:

Benvenuto in CodeIgniter! Stai visualizzando l'applicazione 1!

E per Applicazioni / app_two / views / welcome_message.php, dovrebbe assomigliare a:

Benvenuto in CodeIgniter! Stai sfogliando l'applicazione due!

Ora, abbiamo fatto tutto quanto riguarda il nostro setup multisito. Tuttavia, non funzionerà ancora così come abbiamo ancora bisogno di informare CodeIgniter sulla nostra configurazione multisito, poiché carica sempre l'applicazione predefinita che si trova nel applicazione elenco.

Ritocchi finali

Diamo una rapida occhiata all'impostazione che configura la directory dell'applicazione predefinita. Vai avanti e apri il index.php file nella radice della tua applicazione e cerca il seguente frammento di codice.

/ * * ----------------------------------------------- ---------------- * NOME DELL'ELENCO DELL'APPLICAZIONE * ----------------------------- ---------------------------------- * * Se vuoi che questo front controller usi una "applicazione" diversa * directory rispetto a quella predefinita è possibile impostare il suo nome qui. La directory * può anche essere rinominata o spostata ovunque sul tuo server. Se lo fai, * usa un percorso server assoluto (completo). * Per maggiori informazioni, consultare la guida per l'utente: * * https://codeigniter.com/user_guide/general/managing_apps.html * * NESSUN SLASH DI TRAILING! * / $ application_folder = 'applicazione';

È abbastanza chiaro dal frammento sopra che ti permette di impostare il percorso dell'applicazione predefinita. Quindi questo è il posto in cui possiamo apportare modifiche in modo che raccolga l'applicazione predefinita da una directory diversa da quella predefinita.

Certo, potresti andare avanti e subito fare qualcosa di simile, e questo dovrebbe funzionare app_one applicazione.

$ application_folder = 'applications / app_one';

D'altra parte, cosa faresti se volessi correre app_two? Come una sveltina, è possibile copiare il index.php file su index_app_one.php e index_app_two.php per ogni applicazione. Nel tuo host virtuale, assicurati di apportare le modifiche di conseguenza.

D'altra parte, preferisco un approccio leggermente diverso, e mi piacerebbe fare affidamento sul ENV variabile per scegliere tra le diverse applicazioni in fase di esecuzione.

Ad esempio, puoi impostare l'abitudine ENV variabile in NGINX come mostrato nello snippet seguente.

// imposta la variabile env CI_DEFAULT_APP nella direttiva "location" di vhost fastcgi_param CI_DEFAULT_APP applications / app_one;

Se si utilizza il server Web Apache, lo stesso potrebbe essere ottenuto con:

SetEnv CI_DEFAULT_APP applications / app_one

Quindi, rivediamo il codice nel file index.php file che sfrutta il ENV variabile per decidere l'applicazione predefinita da eseguire.

... $ application_folder = (isset ($ _ SERVER ['CI_DEFAULT_APP'])? $ _SERVER ['CI_DEFAULT_APP']: 'applicazione'); ... 

Quindi, come puoi vedere, controlliamo l'esistenza di CI_DEFAULT_APP ENV variabile in primo luogo, e se non è disponibile, torneremo all'applicazione predefinita.

Più spesso, si desidera eseguire le diverse applicazioni su domini diversi. Idealmente, mi piacerebbe utilizzare due host virtuali diversi per ogni applicazione. Un rapido esempio di ciascun host virtuale dovrebbe essere simile a questo nel contesto di NGINX.

Il dominio www.ci-app-one.com punta a app_one:

server ascolta YOUR_IP: 80; server_name www.ci-app-one.com; root / var / www / html; indice index.html index.php; posizione ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; scade max;  posizione / # Controllare se esiste un file di indice di directory o file, altrimenti instradarlo a index.php. try_files $ uri $ uri / /index.php;  posizione ~ \ .php $ root / var / www / html; fastcgi_split_path_info ^ (. + \. php) (. *) $; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / var / www / html $ fastcgi_script_name; fastcgi_param CI_DEFAULT_APP applications / app_one; include fastcgi_params; 

Allo stesso modo, il dominio www.ci-app-two.com punta a app_two:

server ascolta YOUR_IP: 80; nome_server www.ci-app-two.com; root / var / www / html; indice index.html index.php; posizione ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; scade max;  posizione / # Controllare se esiste un file di indice di directory o file, altrimenti instradarlo a index.php. try_files $ uri $ uri / /index.php;  posizione ~ \ .php $ root / var / www / html; fastcgi_split_path_info ^ (. + \. php) (. *) $; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / var / www / html $ fastcgi_script_name; fastcgi_param CI_DEFAULT_APP applications / app_two; include fastcgi_params; 

Certo, puoi andare avanti ora e testare le tue modifiche per vedere se funziona davvero o no! Non esitare a rispondere a qualsiasi domanda in caso di problemi.

E questo era il modo abbastanza semplice in cui è possibile impostare più applicazioni nel framework CodeIgniter usando un singolo codice base.

Conclusione

Oggi abbiamo analizzato un aspetto interessante del framework CodeIgniter che consente di gestire più applicazioni utilizzando un singolo codebase. Gli ovvi vantaggi di questo sono l'aggiornamento e il mantenimento semplici della base di codice esistente.

CodeIgniter è una potente piattaforma PHP. Sia che tu stia o non inizi o inizi con la prossima versione, non dimenticare di dare un'occhiata a ciò che abbiamo a disposizione per te.

Condividi le tue opinioni se hai già implementato qualcosa di simile o l'avresti avvicinato in un modo leggermente diverso. Ad ogni modo, mi piacerebbe sentire i tuoi pensieri!