v2.5.2
Giriş yap

Mvc Prefix

tahakocak
725 defa görüntülendi

Merhabalar,
Bir kaç gündür aradığım ama bulamadığım bir konuda sizlerden yardım istiyorum.
Kendi altyapımı kurduğum bir mvc alt yapım var bu yapıya prefix sistemi mantığını kuramadım. Yardımcı olursanız sevinirim.
Router:

<?php

class Router
{
    protected $controllerPath = CONTROLLER_PATH;
    protected static $routes = [];
    protected static $url;

    static function getAction($url, $callback, $login = "nologin")
    {
       self::$routes[] = ["GET", $url, $callback, $login];
    }

    static function postAction($url, $callback, $login = "nologin")
    {
        self::$routes[] = ["POST", $url, $callback, $login];
    }

    protected function parseUri()
    {
        $dirname = dirname($_SERVER['SCRIPT_NAME']);
        $dirname = $dirname != '/' ? $dirname : null;
        $basename = basename($_SERVER['SCRIPT_NAME']);
        $request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);
        return $request_uri;
    }
    public function __construct()
    {
        self::$url = $this->parseUri();
    }

    public function run()
    {
        $girdi=0;
        $uri = self::$url;
        foreach (self::$routes as $route) {
            list($method,$url, $callback) = $route;
            $patterns = [
                '{url}' => '([0-9a-zA-Z]+)',
                '{id}' => '([0-9]+)'
            ];
            $url = str_replace(array_keys($patterns), array_values($patterns), $url);
            preg_match('@^' . $url . '$@', $uri, $data);
            if ($data[0] == $uri):
                array_shift($data);
                if ($_SERVER['REQUEST_METHOD']== $method) {
                   $callback = explode("@",$callback);
                   if (file_exists($this->controllerPath."/{$callback[0]}.php")){
                       require_once $this->controllerPath."/{$callback[0]}.php";
                     if (class_exists($callback[0])){
                         if (method_exists($callback[0],$callback[1])){
                             if ($_SERVER['REQUEST_METHOD'] == "POST") {
                                $post = new POST();
                             }

                             $girdi = 1;
                            call_user_func_array([new $callback[0],$callback[1]],array_values($data));
                         }else{
                             echo "Critical Error - Method Not Found";
                             exit;
                         }
                     }else {
                         echo "Critical Error - Class Not Found";
                         exit;
                     }
                   }else {
                       echo "Critical Error - File Not Found";
                       exit;
                   }
                }else {
                    echo "Access Denied - Invalid method";
                    exit;
                }
            endif;
        }
        if ($girdi !== 1) {
            die("404 - not found");
        }
    }

    function Actions() {
        print_r(self::$routes);
    }
}


Şimdiden teşekkürler.

Cevap yaz
Cevaplar (2)
tahakocak
1482 gün önce

Abi mesela;

Router::prefix("/blog",{
    Router::getAction("/login","blog@login","nologin");
});

Bunun çıktısı /blog/login router verecek.

tayfunerbilen
1483 gün önce

istediğin tam olarak nedir, prefix'ten kastını anlayamadım, onu tam söylersen yardımcı olmaya çalışalım :)