Match string og replace

Tags:    php codeigniter

Så har jeg en hjernevrider...

Bruger Codeigniter og er igang med at finde link til mine controllers ved at indtaste det "normale" link. Som er. controller/method/id

Lige ser mine routes sådan her ud:
Fold kodeboks ind/udPHP kode 


Bruger Smarty til at lave mine views, og da links er dynamiske har jeg brug for en løsning.

I Smarty vil jeg gerne kunne gøre sådan her:
Fold kodeboks ind/udHTML kode 

Så det funktionen site_url skal kunne er at match på mine routes.
Funktionen skulle gerne returnere "administrator/client/152" når den er lavet.

Min idé er først at matche på alle routes values, og derefter deres keys. (For at være 100% sikker, RegEx kunne jo være noget andet.)

Ved bare ikke hvordan jeg skal gøre det.


For at matche på array keys bruger jeg dette stykke kode:
Fold kodeboks ind/udPHP kode 

Det et udkast af en længere funktion.



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Så kig på dette:
https://github.com/EllisLab/CodeIgniter/wiki/DrF-Reverse-Routing

Du kan sikkert finde mere ved at søge på reverse routing.

CodeIgniter ser ikke ud til at være gennemtænkt i den retning. Routing i CI: match en streng, for at konvertere til en anden streng, for derefter at konvertere til controller+action. Man kunne vist spare en konvertering. :o)



Ville det ikke være smartere at dykke ned i CI router class. Den der matcher URL'er. :o)
http://stackoverflow.com/questions/2062086/how-to-get-controller-action-url-informations-with-codeigniter

Hvis du skal gøre det dynamisk, skal du vende den om, og generere URLer ud fra en række parametre bestående af controller, action og URL-params. Og det kan du vist også gøre med site_url().

Men så meget kender jeg ikke til CI.



Problemet er jo at jeg linker til stien som den ville være hvis der ikke var brugt nogen routing.

Så derfor er jeg nød til at kode det selv.



CI Routing matcher den URL der står i din browser, for at finde controller+action.
Det er nøjagtig det samme du vil.

CI Routeren outputter ikke kun en URL. Den parser også din indtastede URL - ellers ville CI ikke vide hvilken controller+action der skal eksekveres. :o)

Alt du skal lave er en funktion der indkapsler samme funktionalitet. Men jeg forstår ikke hvad du vil bruge det til, i en template.



Indlæg senest redigeret d. 21.07.2014 14:21 af Bruger #10216
@Michael
Mine routes er dynamiske, så hvis jeg skal linke til noget i mine views, er jeg nød til at konvertere noget statisk til den route der skal følges.

Det statiske er de controllers og methods mine routes linker til.
Derfor skal jeg arbejde mig tilbage fra det routesne linker til, og derved finde ud af hvad routen er og linke til den.


Har kigget lidt i CI routeren, men kan ikke finde der hvor CI finder routen der skal følges. https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Router.php



Tusind tak Michael. Rigtig fedt lib du har fundet til mig.
- Troede lige jeg skulle bruge mange timer på at øve mig i RegEx, og så kode det :-)



t