Kontynuujemy temat routingu dla naszego frameworka MVC, który napiszemy. Do dzieła.

Nasz plik .htaccess:

RewriteEngine On
RewriteRule ^ entry.php

Nasz entry.php:

<?php 

class Helper {
    public static function request_uri()
    {
        $uri = explode("/", $_SERVER['REQUEST_URI']);
        $action = array_pop($uri);
        $controller = array_pop($uri);
        echo "Controller: $controller, Action: $action";
    }
}

//http://localhost/sometry/home/index

Helper::request_uri();
//Controller: home, Action: index

Teraz tworzymy plik home_index.php:

<?php 
echo "from home_index.php";

Tworzymy też product_list.php:

<?php 
echo "from product_list.php";

Okej, teraz się postarajmy, aby nasz helper załączał odpowiednie pliki jeżeli REQUEST URI będzie odpowiednie (/kontroler/akcja mapowane do kontroler_akcja.php):

<?php 

class Helper {
    public static function request_uri()
    {
        $uri = explode("/", $_SERVER['REQUEST_URI']);
        $action = array_pop($uri);
        $controller = array_pop($uri);
        $path = __DIR__ . "/{$controller}_{$action}.php";
        if(file_exists($path))
        {
            require $path;
        }
        else {
            die("Wrong URI");
        }
    }
}

//http://localhost/sometry/home/index

Helper::request_uri();
//from home_index.php

Wydaje się dziecinnie proste.

Nadal jednak możemy to popsuć podając dobry URI, ale z query stringiem:

<?php 

class Helper {
    public static function request_uri()
    {
        $uri = explode("/", $_SERVER['REQUEST_URI']);
        $action = array_pop($uri);
        $controller = array_pop($uri);
        $path = __DIR__ . "/{$controller}_{$action}.php";
        if(file_exists($path))
        {
            require $path;
        }
        else {
            die("Wrong URI");
        }
    }
}

//http://localhost/sometry/home/index?q=blabla

Helper::request_uri();
//Wrong URI

Nie powinno tak być, ścieżka jest dobra, tylko z query stringiem. Z tym sobie poradzimy następnym razem.