Codeigniter, hjælp til infrastuktur

Tags:    php codeigniter

Hej Udviklere. Jeg har en problemstilling jeg ønsker hjælp til.

Jeg har en side der er opbygget i Codeigniter.
Det er egentlig en form for CMS, hvor jeg har administratorer og brugere.

Jeg vil gerne have sådan jeg at nemt kan tilføje moduler (controllers?) til mit admin dashboard.

Tænker selv jeg har én controller der hedder dashboard.php, som man så redigere i og fortæller hvilke filer der er admin moduler, og så kan den loade dem ved at gå til domæne.dk/dashboard/(module_handle)

Men jeg tænker det bliver lidt besværligt? Er der en nemmere måde at integrere dette på?



3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Den løsning du foreslår selv, er at manuelt skulle redigere en fil, for hvert modul du ønsker at aktivere.

Jeg bygger selv modulære systemer og starter altid med drop-in moduler. Dvs. alle moduler initialiseres via et main class objekt. Dette objekt er så en mini-dispatcher der først tjekker om modulet selv skal initialiseres fuldt. Hvis ja, klargøres URL'er og events.

Alternativt kan du registrere modulerne ind i databasen - når de er listet her, så er de aktive.

Modulært byggede systemer er ikke nemt.

Men det lyder egentlig lidt underligt hvis den funktionalitet ikke allerede er bygget ind i CI - har du tjekket docs?



Hvis du gerne vil have det automatiseret ville jeg gøre det sådan, så controllers der kvalificerer sig til at deltage i admin-dashboardet (altså ikke controllers der beskæftiger sig med frontend-ting), har en konstant, statisk variabel, statisk funktion eller lignende, der rapporterer det, når det bliver efterspurgt af dit dashboard (fx ved at lave en glob() på controller-mappen, for at finde alle controller-filerne).

Hvis vi fx siger at din Useradmin controller skal fremgå i dashboardet, så kan controlleren se sådan ud:

Fold kodeboks ind/udKode 


Så kan din Dashboard controller have følgende i sin index action
Fold kodeboks ind/udKode 


og så kan dit dashboard view have følgende:
Fold kodeboks ind/udKode 


Du skal nok tweake koden lidt og rette småfejl hist og her, men slutresultatet vil være at når du går ind på dashboard/index, vil den løbe alle controllers igennem, checke om de har en class constant der hedder "IN_DASHBOARD", og hvis det er tilfældet vil de lave et link til den controllers index-action på dashboardet.

Men det lyder egentlig lidt underligt hvis den funktionalitet ikke allerede er bygget ind i CI - har du tjekket docs?

Lad os lige få nogle ting på plads:

CodeIgniter er et udviklingsframework. CodeIgniter beskæftiger sig med at gøre en MVC-kodestruktur tilgængelig for udvikleren, CodeIgniter beskæftiger sig med at gøre alskens common-use libraries (at sende mails, uploade filer mv.) tilgængelige for udvikleren, og CodeIgniter beskæftiger sig med at håndtere urls og config filer.

CodeIgniter er ikke et CMS. CodeIgniter beskæftiger sig ikke med modulære visninger af arbitrær data i meget specifik kontekst. Den giver dig værktøjerne der skal til for at skabe den slags funktionalitet, men CodeIgniter antager ikke, at det nødvendigvis er sådan en funktionalitet, din applikation skal bruge. At have en masse ekstra-kode til at lave et modulært admin-dashboard er et meget specifikt stykke arbejde, der ikke hører hjemme i et general purpose framework. Det er fx ret useless når du bruger CodeIgniter som IRC-bot, som REST-api server for en phonegap javascript app, eller lignende.



Indlæg senest redigeret d. 20.06.2014 17:33 af Bruger #8223
Fine svar begge.
Det har givet mig en god viden til hvordan jeg skal fortsætte arbejdet :)



t