Meerdere applicaties beheren in CodeIgniter

Vandaag zullen we onderzoeken hoe u meerdere applicaties in het codelijst van CodeIgniter kunt beheren met behulp van een enkele codebase. In de loop van dat, zullen we doorgaan en twee verschillende CodeIgniter-applicaties maken die de codevoorbeeld CodeIgniter delen.

Het delen van de basiscodebase tussen verschillende applicaties is niet iets nieuws, omdat het al wordt toegepast door verschillende frameworks en open-source systemen, en CodeIgniter is niet anders. U kunt hiermee eenvoudig meerdere toepassingen beheren die de belangrijkste CodeIgniter-bibliotheek en API-bestanden delen, en tegelijkertijd kunt u verschillende databases en locatiespecifieke configuraties gebruiken.

Om te beginnen zullen we de voordelen van de multisite-configuratie doornemen en als we verdergaan, zullen we een praktische demonstratie doornemen van wat er nodig is om meerdere applicaties in het CodeIgniter-framework in te stellen..

Voordelen van de multisite-installatie

In dit gedeelte belichten we een aantal voordelen van het instellen van meerdere locaties.

Een van de meest voor de hand liggende voordelen die ik meteen zou kunnen aanvoeren, is dat de multisite-installatie een gemeenschappelijke codebase deelt, en dat zou de upgrade- en onderhoudsprocessen van uw toepassing veel gemakkelijker moeten maken.

Laten we ons bijvoorbeeld voorstellen dat er tien verschillende CodeIgniter-toepassingen onder uw riem lopen. En u hebt net ontdekt dat een nieuwe versie van het CodeIgniter-framework beschikbaar is voor een upgrade en u wilt het zo snel mogelijk upgraden om ervoor te zorgen dat de code veilig en stabiel blijft.

Als je voor elk van je applicaties een aparte codebase zou hebben, zou het zeker een vervelend proces zijn om elke site te doorlopen en om beurten te upgraden. Met de multisite-installatie hoeft u dit slechts één keer te doen, omdat de basiscodebase op alle sites wordt gedeeld!

Vervolgens kunt u voor elke toepassing een andere database gebruiken, ook al delen ze een gemeenschappelijke codebase. Het is zelfs een van de populairste gebruiksgevallen van het instellen van multisite!

Afgezien van het gebruik van een andere database voor elke toepassing, kunt u een set-up maken die dezelfde database gebruikt, maar een ander thema of andere lay-out in de front-end.

Als u de FTP-gebaseerde aanpak nog steeds gebruikt om uw sitebestanden over de verschillende servers te verplaatsen, zou ik zeggen dat u van de multisite-aanpak zult houden omdat het uw werk in grote mate tot een minimum beperkt!

Meerdere applicaties maken

In dit gedeelte stellen we de basismapstructuur in om een ​​multisite-configuratie te implementeren.

Aan de basis van uw CodeIgniter-toepassing maakt u een toepassingen directory. Dit is de hoofddirectory die onze verschillende applicaties zal bevatten.

Ga vervolgens door en maak twee nieuwe mappen-toepassingen / app_one en toepassingen / app_two. Natuurlijk zou je het kunnen noemen zoals je het wilt, maar ik zal het eenvoudig houden voor nu.

Zoals u ziet, gaan we dus twee verschillende applicaties opzetten die de enkele codebase van het CodeIgniter-framework zullen gebruiken. Hoewel de multisite-configuratie de meeste coderingsbestanden van CodeIgniter zal hergebruiken, moeten we nog steeds een aantal bestanden en mappen dupliceren naar elke toepassing die we maken.

Laat me snel een lijst maken van de bestanden en mappen die u in de eerste plaats van de standaardtoepassing zou moeten kopiëren.

Kopieer de volgende mappen van de standaardtoepassingsdirectory naar toepassingen / app_one en toepassingen / app_two:

  • cache
  • config
  • logs

Zoals je kunt zien, ligt het voor de hand om aparte mappen te hebben cache en logs voor elke toepassing. En de config directory is een must voor de werking van je CodeIgniter-applicatie, dus we gaan het toch kopiëren.

Laten we vervolgens een aantal bestanden samen met de benodigde mappen kopiëren, zodat we onze multisite-applicatie kunnen testen.

Kopieer de volgende bestanden naar onze app_one en app_two toepassingen uit de standaard CodeIgniter-toepassing:

  • controllers / welkom.php
  • views / fouten
  • views / welcome_message.php

Voor uw snelle referentie, de controllers / welkom.php bestand moet er als volgt uitzien:

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

En de views / welcome_message.php bestand zou eruit moeten zien.

    Welkom bij CodeIgniter    

Welkom bij CodeIgniter! U bladert over Application One!

De pagina die u bekijkt, wordt dynamisch gegenereerd door CodeIgniter.

Als u deze pagina wilt bewerken, vindt u deze op:

application / views / welcome_message.php

De bijbehorende controller voor deze pagina is te vinden op:

application / controllers / welkom.php

Als u voor de allereerste keer CodeIgniter verkent, moet u beginnen met het lezen van de gebruikershandleiding.

Pagina weergegeven in verstreken tijd seconden. '. CI_VERSION. '': "?>

Natuurlijk moet u het volgende bericht in het weergavebestand wijzigen, zodat we de applicatie kunnen differentiëren tijdens het testen.

Voor toepassingen / app_one / views / welcome_message.php, het zou er als volgt uit moeten zien:

Welkom bij CodeIgniter! U bladert over Application One!

En voor toepassingen / app_two / views / welcome_message.php, het zou er als volgt uit moeten zien:

Welkom bij CodeIgniter! U bekijkt Applicatie twee!

Nu hebben we alles gedaan wat betreft onze multisite-opstelling. Het zal echter nog niet uit de doos werken, omdat we nog steeds CodeIgniter over onze multisite-configuratie moeten informeren, omdat het altijd de standaardtoepassing in de toepassing directory.

Afwerking

Laten we even kijken naar de instelling die de standaard applicatiemap configureert. Ga je gang en open de index.php bestand in de hoofdmap van uw toepassing en zoek naar het volgende codefragment.

/ * * ----------------------------------------------- ---------------- * NAMEN TOEPASSINGENBERICHTNAAM * ----------------------------- ---------------------------------- * * Als u wilt dat deze frontregelaar een andere "toepassing" gebruikt * directory dan de standaard directory, kunt u hier zijn naam instellen. De map * kan ook overal op uw server worden hernoemd of verplaatst. Als u dat wel doet, gebruikt u * een absoluut (volledig) serverpad. * Voor meer informatie raadpleegt u de gebruikershandleiding: * * https://codeigniter.com/user_guide/general/managing_apps.html * * GEEN TRAILING SLASH! * / $ application_folder = 'applicatie';

Uit het bovenstaande fragment is vrij duidelijk dat je het pad van je standaardtoepassing kunt instellen. Dit is dus de plaats waar we wijzigingen kunnen aanbrengen zodat het de standaardtoepassing uit een andere directory dan de standaardtoepassing haalt.

Natuurlijk kun je meteen doorgaan en meteen iets dergelijks doen, en dat zou de app_one toepassing.

$ application_folder = 'applications / app_one';

Aan de andere kant, wat zou je doen als je wilt rennen? app_two? Als vluggertje zou je het kunnen kopiëren index.php bestand naar index_app_one.php en index_app_two.php voor elke toepassing. Controleer in uw virtuele host of u de wijzigingen dienovereenkomstig aanpast.

Aan de andere kant, geef ik de voorkeur aan een enigszins andere aanpak, en ik wil graag vertrouwen op de ENV variabele om te kiezen tussen de verschillende applicaties tijdens runtime.

U kunt bijvoorbeeld de aangepaste instellen ENV variabele in NGINX zoals getoond in het volgende fragment.

// stel de env-variabele CI_DEFAULT_APP in op de "location" -richtlijn van vhost fastcgi_param CI_DEFAULT_APP-toepassingen / app_one;

Als u de Apache-webserver gebruikt, kan hetzelfde worden bereikt met:

SetEnv CI_DEFAULT_APP-toepassingen / app_one

Laten we vervolgens de code in de index.php bestand dat gebruik maakt van de ENV variabele om te beslissen welke standaardtoepassing moet worden uitgevoerd.

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

Dus, zoals je kunt zien, controleren we het bestaan ​​van de CI_DEFAULT_APP ENV variabele in de eerste plaats en als deze niet beschikbaar is, vallen we terug naar de standaardtoepassing.

Vaker wel dan niet, wilt u uw verschillende toepassingen op verschillende domeinen uitvoeren. In het ideale geval zou ik twee verschillende virtuele hosts willen gebruiken voor elke toepassing. Een snel voorbeeld van elke virtuele host zou er ongeveer zo uit moeten zien in de context van NGINX.

Het domein www.ci-app-one.com verwijst naar app_one:

server luister YOUR_IP: 80; servernaam www.ci-app-one.com; root / var / www / html; index index.html index.php; locatie ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; vervalt max;  location / # Controleer of er een bestand of directoryindexbestand bestaat, anders wordt het naar index.php gestuurd. try_files $ uri $ uri / /index.php;  Locatie ~ \ .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-toepassingen / app_one; include fastcgi_params; 

Evenzo wijst het domein www.ci-app-two.com naar app_two:

server luister YOUR_IP: 80; servernaam www.ci-app-two.com; root / var / www / html; index index.html index.php; locatie ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; vervalt max;  location / # Controleer of er een bestand of directoryindexbestand bestaat, anders wordt het naar index.php gestuurd. try_files $ uri $ uri / /index.php;  Locatie ~ \ .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-toepassingen / app_two; include fastcgi_params; 

Natuurlijk kunt u nu doorgaan en uw wijzigingen testen om te zien of het echt werkt of niet! Aarzel niet om me eventuele vragen te schieten als je problemen ondervindt.

En dat was de vrij eenvoudige manier waarop u meerdere applicaties in het CodeIgniter-framework kunt instellen met behulp van een enkele codebase.

Conclusie

Vandaag hebben we een interessant aspect van het CodeIgniter-framework doorgenomen, waarmee u meerdere applicaties kunt beheren met behulp van een enkele codebase. De voor de hand liggende voordelen hiervan zijn een eenvoudige upgrade en onderhoud van uw bestaande codebase.

CodeIgniter is een krachtig PHP-platform. Of je nu net begint of niet begint met de volgende versie, vergeet niet om te controleren wat we voor jou beschikbaar hebben, en.

Deel uw mening als u al iets dergelijks hebt geïmplementeerd of als u het op een iets andere manier zou hebben benaderd. Hoe dan ook, ik zou graag je gedachten horen!