CodeIgniter vraag over URL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Erik Van woerden

Jan Erik Van woerden

23/08/2010 23:06:43
Quote Anchor link
Hallo,

Ik ben net begonnen met CodeIgniter.
Nu is het zo dat het url systeem zo werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
example.com/class/function/ID

Dus 1ste slash class, 2de function en 3de de eigen gegevens

Nu wil ik graag een CMS systeem maken en dat het dan zo werd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
example.com/class/ID
(En dat hij dan de function index of een andere aanroept)

Weet iemand of dit mogelijk is en zoja hoe?

Alvast bedankt.
 
PHP hulp

PHP hulp

18/07/2024 01:05:45
 
Jelmer -

Jelmer -

23/08/2010 23:23:52
 
Danny Roelofs

Danny Roelofs

23/08/2010 23:27:13
Quote Anchor link
Nou is het een tijdje geleden dat ik met Codeignitor bezig ben geweest, en ik kan me niet herinneren dat de URL er standaard zo uitzag maar dat je altijd nog met mod_rewrite aan de slag moest.

En als het goed is zag de URL er dan zonder mod_rewrite uit als index.php?/class/ID

Of ik zit er gewoon goed naast.

Maar in ieder geval, de problemen die ik soms had met Codeignitor was de reden om aan de slag te gaan met mijn eigen framework waar de toekomst CMS nog niet in zicht is, maar ik wel gebruik om mijn eigen projecten mee te ontwikkelen gebruik ik deels deze code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php

class Url
{
 function
GetSegment($int)
 {

    $str_Temp = $_SERVER['REQUEST_URI'];
    $int_Temp = strpos($str_Temp,'php');
    
    $int_Temp = strpos($str_Temp,'?', $int_Temp);
    
    $int_Temp++;
    if ($int_Temp>0)
    {

        $this->aSegmentUrl = explode('/',substr($str_Temp,$int_Temp,strlen($str_Temp)-$int_Temp));
    }


    return $this->aSegmentUrl[$int];

 }

 function
CountSegments()
 {

    $str_Temp = $_SERVER['REQUEST_URI'];
    if ($int_Temp = strpos($str_Temp,'?'))
    {

        $int_Temp++;
        $arr_Temp = explode('/',substr($str_Temp,$int_Temp,strlen($str_Temp)-$int_Temp));
    return count($arr_Temp)-1;
    }

    else
    {
    }




 }




}

?>


En in de zo te noemen kernel die centraal staat tussen alle librarys en modules welke beiden eigenlijk classes zijn, die laad ik in met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
  function Load_Lib($sLibrary,$sArg=0)
    {

        $sLibrary = ucfirst(strtolower($sLibrary));
        $strTemp = 'lib_'.$sLibrary;

        if (!method_exists($sLibrary,$sLibrary))
        {

            require('Libs/'.$sLibrary.".lib.php");
            $this->$strTemp = new $sLibrary($this,$sArg);
        }

        else
        {
            debug_print_backtrace();
            trigger_error("Loading library again?", E_USER_ERROR);
        }
    }


    function
Load_Module($sModule,$sArg=0)
    {

        $sModule = ucfirst(strtolower($sModule));

        if (array_search($sModule, $this->aLoadedModules) === 0)
        {

            //echo $sModule.' is already loaded..';
        }
        else
        {

            
            require('Modules/'.$sModule."/".$sModule.".mod.php");
            $strTemp = 'mod_'.$sModule;
            
            $this->$strTemp = new $strTemp($this,$sArg);
            $this->aLoadedModules[] = $sModule;

        }
    }

?>


En met deze functie kan ik zelfs via de URL een methode (functie) binnen een class aanroepen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
    function DetectUrlCalls()
    {

        /* if the type is module, next must be the name of the module class, 3th must be function and 4th the function itself
         * if the type is language, next is the shortcode (nl / en / de ) and so on.
         *
         */


        $sUrl = $_SERVER['REQUEST_URI'];
        $sUrlToLow = strtolower($sUrl);
    
        $iPosPhpQM = strpos($sUrlToLow,'php?');

        if ($iPosPhpQM>0 )
        {

    
            $iPosPhpQM = $iPosPhpQM + 4;
            $aUrlSegments            = explode('/', substr($sUrl,$iPosPhpQM,strlen($sUrl)-$iPosPhpQM));
            $aUrlSegmentsLowerCased = explode('/', substr($sUrlToLow,$iPosPhpQM,strlen($sUrlToLow)-$iPosPhpQM));
    
        }

        else
        {
            return false;
        }



        $iMatchPos = array_search('module',$aUrlSegmentsLowerCased);
        if ($iMatchPos)
        {

            if (strcmp('function',$aUrlSegmentsLowerCased[$iMatchPos+2]) == 0)
            {

                $sModule    = ucfirst(strtolower($aUrlSegments[$iMatchPos+1]));
                $sFunction    = $aUrlSegments[$iMatchPos+3];



                $this->Load_Module($sModule);
                $oModule = 'mod_'.$sModule;

                
                
        
                if(method_exists($this->$oModule,$sFunction))
                {

                    $this->$oModule->$sFunction();
                    exit();
                }





                if ($bAccess == true)
                {

                    if(method_exists($this->$oModule,$sFunction))
                    {

                        $this->$oModule->$sFunction();
                        exit();
                    }

                    $bAccess = false;
                }
            }
        }
    }

?>


Maar dit zijn zeg maar de ruwe bouwstenen die jij nu ziet van mijn project, het is dan denk ik even uitvogelen hoe je dit zou moeten toepassen en het ontbreekt natuurlijk nog het een en ander aan controle wanneer iets wel of niet mag worden aangesproken.

En ja zoals ik de librarys en modules gebruik, het in wijze classes zijn, is het in theorie al eigenlijk fout hoe je om moet gaan met classes, maar het werkt en behaalt de doelstelling zoals ik er mee om wil kunnen gaan.

Hoop dat je hier iets aan hebt..
 
Jan Erik Van woerden

Jan Erik Van woerden

24/08/2010 00:17:59
Quote Anchor link
@Jelmer
Dat is wat ik zocht. Bedankt

@Danny
Normaal ziet de url er zo uit: example.com/index/class/function/id
Maar ik had hem inderdaad al bewerkt met mod_rewrite.
Maar ik moet voor een klant een bestaande website aanpassen die in die Franwork is gemaakt. Maar ik ga waarschijnlijk wel dit systeem vaker gebruiken voor website's, maar ik snap nog niet helemaal wat het nadeel van dit systeem is.
 
Danny Roelofs

Danny Roelofs

24/08/2010 00:43:37
Quote Anchor link
Nou ik zelf zie er verder ook geen probleem in met Codeignitor, en hoe ze te werk gaan wat betreft met de Classes, ik had er ooit meer als 2 jaar gelezen eens een artikel over gelezen en de tekst en uitleg gaf aan dat het niet de juiste manier was.

Maar goed, dat moet ook weer niet boeien als de praktijk leert dat jij je projecten ermee kan realiseren zonder problemen.

Maar ik denk dat ik toen tegen een probleem (bug) was aangelopen in het project, vooral toen ik een website meertalig wilde maken, met javascript/ajax er in.

Toen werd het eventjes op dat moment zo rommelig voor me dat ik het probleem niet kon ontlopen om het toch werkend te krijgen.

Maar codeignitor was een goede leermeester in het opdoen van ideeën en dan daarmee
aan de slag te kunnen.
Gewijzigd op 24/08/2010 00:44:50 door Danny Roelofs
 
Jan Erik Van woerden

Jan Erik Van woerden

24/08/2010 22:50:49
Quote Anchor link
Ik weet niet wanneer je dat hebt gebruikt maar volgensmij ondersteunen ze nu ook jQuery dus dat kan handig zijn als het dus meertalig wordt.
Eerst maar eens met alleen PHP proberen en dan ook jQuery er maar bij betrekken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.