Så här hanterar du flera applikationer i CodeIgniter

Idag ska vi undersöka hur du kan hantera flera applikationer i CodeIgniter-webbramen med en enda kodbas. Under det kommer vi att fortsätta och skapa två olika CodeIgniter-applikationer som kommer att dela koden CodeIgniter codebase.

Att dela kärnkodbasen över olika applikationer är inte något nytt eftersom det redan är praktiserat av olika ramar och öppen källkod, och CodeIgniter är inte annorlunda. Det låter dig enkelt hantera flera program som delar kärnan CodeIgniter-bibliotek och API-filer, och samtidigt kan du använda olika databaser och platsspecifika konfigurationer.

Till att börja med går vi igenom fördelarna med multisite-inställningen och när vi fortsätter går vi igenom en praktisk demonstration av vad som krävs för att konfigurera flera applikationer i CodeIgniter-ramverket.

Fördelar med Multisite Setup

I det här avsnittet kommer vi att lyfta fram några fördelar med att ha en multisite-inställning.

En av de mest uppenbara fördelarna som jag direkt kan påpeka är att multisite-inställningen delar en gemensam kodbas, och det borde göra uppgraderings- och underhållsprocesserna i din ansökan mycket enklare.

Låt oss föreställa oss att du har tio olika CodeIgniter-program som körs under ditt bälte. Och du kom bara att veta att en ny version av CodeIgniter Framework finns tillgänglig för uppgradering och du vill uppgradera det så snart som möjligt för att se till att koden förblir säker och stabil.

Om du hade en separat kodbas för var och en av dina applikationer, skulle det definitivt vara en tråkig process att gå igenom varje webbplats och uppgradera det i sin tur. Med multisite-inställningen behöver du bara göra det en gång, eftersom kärnkodbasen delas över alla webbplatser!

Därefter kan du använda en annan databas för varje applikation trots att de delar en gemensam kodbas. Faktum är att det är en av de mest populära användningsområdena för att skapa multisite!

Förutom att använda en annan databas för varje applikation kan du skapa en inställning som använder samma databas men ett annat tema eller layout i fronten.

Om du fortfarande använder den FTP-baserade metoden för att flytta dina webbplatsfiler över de olika servrarna, skulle jag säga att du kommer att älska multisite-metoden eftersom det minimerar ditt arbete i stor utsträckning!

Så här skapar du flera applikationer

I det här avsnittet ställer vi upp den grundläggande katalogstrukturen för att implementera en multisite-inställning.

Till roten till din CodeIgniter-applikation, skapa en tillämpningar katalogen. Detta är huvudkatalogen som håller våra olika applikationer.

Därefter fortsätt och skapa två nya kataloger-applikationer / app_one och applikationer / app_two. Självklart kan du namnge det som du vill att det ska vara, men jag kommer att hålla saker enkelt för nu.

Så, som du kan se, kommer vi att ställa in två olika applikationer som använder den enkla kodbasen för CodeIgniter-ramen. Även om multisite-inställningen kommer att återanvända de flesta CodeIgniter-ramfilerna behöver vi fortfarande duplicera ett par filer och kataloger till varje applikation vi skapar.

Låt mig snabbt lista de filer och kataloger som du ska kopiera från standardprogrammet i första hand.

Kopiera följande kataloger från standardprogramkatalogen till applikationer / app_one och applikationer / app_two:

  • cache
  • config
  • loggar

Som du kan se är det uppenbart att ha separata kataloger för cache och loggar för varje applikation. Och den config katalog är ett måste för arbetet med din CodeIgniter-applikation, så vi kommer att kopiera det ändå.

Låt oss sedan kopiera ett par filer tillsammans med nödvändiga kataloger som gör att vi kan testa vår multisite-applikation.

Kopiera följande filer till vår app_one och app_two applikationer från standardprogrammet CodeIgniter:

  • controllers / welcome.php
  • visningar / fel
  • visningar / welcome_message.php

För din snabba referens controllers / welcome.php filen ska se ut:

 * @se https://codeigniter.com/user_guide/general/urls.html * / offentliga funktionsindex () $ this-> load-> view ('welcome_message'); 

Och den visningar / welcome_message.php filen ska se ut.

    Välkommen till CodeIgniter    

Välkommen till CodeIgniter! Du surfar Application One!

Sidan du tittar på genereras dynamiskt av CodeIgniter.

Om du vill redigera den här sidan hittar du den på:

application / vyer / welcome_message.php

Den motsvarande styrenheten för denna sida finns på:

application / controllers / Welcome.php

Om du utforskar CodeIgniter för första gången bör du börja med att läsa Användarhandboken.

Sidan gjord i förfluten tid sekunder. '. CI_VERSION. '': "?>

Självklart bör du ändra följande meddelande i visningsfilen så att vi kunde differentiera programmet under testningen.

För applikationer / app_one / vyer / welcome_message.php, det ska se ut som:

Välkommen till CodeIgniter! Du surfar Application One!

Och för applikationer / app_two / vyer / welcome_message.php, det ska se ut som:

Välkommen till CodeIgniter! Du bläddrar Applikation Två!

Nu har vi allt gjort så långt som vår multisite setup är oroad. Det kommer emellertid inte att fungera ur lådan ändå eftersom vi fortfarande behöver informera CodeIgniter om vår multisite-inställning eftersom det alltid laddar standardprogrammet i Ansökan katalog.

Finputsning

Låt oss snabbt titta på inställningen som konfigurerar standardprogramkatalogen. Gå vidare och öppna index.php filen i roten till din ansökan och leta efter följande kodbit.

/ * * ----------------------------------------------- ---------------- * APPLICATIONS DIRECTORY NAME * ----------------------------- ---------------------------------- * * Om du vill att den här frontkontrollern ska använda ett annat "program" * katalog än standard du kan ange sitt namn här. Katalogen * kan också bytas om eller flyttas var som helst på din server. Om du gör det, använd * en absolut (fullständig) serverväg. * För mer information, se användarhandboken: * * https://codeigniter.com/user_guide/general/managing_apps.html * * INGEN SLUTSÄTTNING! * / $ application_folder = 'application';

Det är ganska klart från ovanstående kod att det låter dig ställa in sökvägen för din standardprogram. Så det här är platsen där vi kan göra ändringar så att den hämtar standardprogrammet från en annan katalog än standarden.

Naturligtvis kan du gå vidare och genast göra något så här, och det borde springa app_one Ansökan.

$ application_folder = 'applications / app_one';

Å andra sidan, vad skulle du göra om du vill springa app_two? Som en quickie kan du kopiera index.php fil till index_app_one.php och index_app_two.php för varje applikation. Se till att du gör ändringarna i enlighet med din virtuella värd.

Å andra sidan föredrar jag en något annorlunda inställning, och jag skulle vilja förlita mig på ENV variabel att välja mellan olika applikationer vid körning.

Till exempel kan du ställa in anpassningen ENV variabel i NGINX som visas i följande kod.

// Ange env-variabel CI_DEFAULT_APP i "plats" -direktivet för vhost fastcgi_param CI_DEFAULT_APP-applikationer / app_one;

Om du använder Apache webbservern kan samma uppnås med:

SetEnv CI_DEFAULT_APP applikationer / app_one

Låt oss sedan ändra koden i index.php fil som drar nytta av ENV variabel för att bestämma att standardprogrammet ska köras.

... $ application_folder = (isset ($ _ SERVER ['CI_DEFAULT_APP'])? $ _SERVER ['CI_DEFAULT_APP']: "ansökan"); ... 

Så, som du kan se, kontrollerar vi existensen av CI_DEFAULT_APP ENV variabel i första hand, och om den inte är tillgänglig kommer vi tillbaka till standardprogrammet.

Ofta vill du inte köra dina olika applikationer på olika domäner. Helst skulle jag vilja använda två olika virtuella värdar för varje applikation. Ett snabbt exempel på varje virtuell värd ska se ut så här i samband med NGINX.

Domänen www.ci-app-one.com pekar på app_one:

server lyssna YOUR_IP: 80; servernamn www.ci-app-one.com; root / var / www / html; index index.html index.php; plats ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; löper ut max;  plats / # Kontrollera om det finns en fil- eller katalogindexfil, annars flytta den till index.php. try_files $ uri $ uri / /index.php;  plats ~ \ .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 applikationer / app_one; inkluderar fastcgi_params; 

På samma sätt pekar www.ci-app-two.com domänen på app_two:

server lyssna YOUR_IP: 80; servernamn www.ci-app-two.com; root / var / www / html; index index.html index.php; plats ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; löper ut max;  plats / # Kontrollera om det finns en fil- eller katalogindexfil, annars flytta den till index.php. try_files $ uri $ uri / /index.php;  plats ~ \ .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 applikationer / app_two; inkluderar fastcgi_params; 

Självklart kan du fortsätta nu och testa dina ändringar för att se om det verkligen fungerar eller inte! Tveka inte att skjuta mig några frågor om du möter några problem.

Och det var det ganska enkla sättet att skapa flera applikationer i CodeIgniter-ramen med en enda kodbas.

Slutsats

Idag gick vi igenom en intressant aspekt av CodeIgniter-ramverket som låter dig hantera flera applikationer med en enda kodbas. De uppenbara fördelarna med det är lätt uppgradering och underhåll av din befintliga kodbas.

CodeIgniter är en kraftfull PHP-plattform. Oavsett huruvida du bara är igång eller börjar med nästa version, glöm inte att kolla vad vi har tillgång till för dig också.

Dela dina tankar om du redan har implementerat något liknande eller du skulle ha kontaktat det på ett annorlunda sätt. Hur som helst skulle jag gärna höra dina tankar!