v2.1.1
Giriş yap

Mvc Frefix Olayı

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.
Larevel'de de var hatta bu sistem.
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 . '[email protected]', $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);
    }
}

?>

Yapmaya çalıştığım şey ise;

Router::prefix("/blog",{
    Router::getAction("/login","[email protected]","nologin");
});

Router dizisine /blog/login bu route'u ekleyecek.

Cevaplar
tayfunerbilen
8 gün önce
public static $prefix = '';
//.....
static function getAction($url, $callback, $login = "nologin") {
   self::$routes[] = ["GET", self::$prefix . $url, $callback, $login];
}

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

public static function prefix($prefix){
    self::$prefix = $prefix;
    return new self();
}

public function group($closure){
    $closure();
    self::$prefix = '';
}

bu mantıkta yapabilirsin kullanırken de şöyle kullanman gerek

Route::prefix('/admin')->group(function(){
    Route::getAction('/', '[email protected]', 'login');
    Route::getAction('/users', '[email protected]', 'login');
    Route::getAction('/posts', '[email protected]', 'login');
});

belki kendi sistemine göre bir kaç ayar yapman gerekebilir çünkü yazdığın sınıf pek kullanışlı değil :)

tahakocak
20 gün önce

Güncel...

tahakocak
8 gün önce

Güncel...

tahakocak
6 gün önce

Teşekkür ederim abi. Class'ın gelişme ihtiyacının olduğunun farkındayım.
Larevel'in alt yapısını kullandığım için bayadır yatıyor sistem. Elimdeki proje bitince ilk işim composer dahilinde bu sisteme bir bakım yapmak olacak.

Önce Burayı Okuyun!
Cevap yazarken markdown kod yazımını kullanmanız gerekiyor. Nasıl kullanacağınızı bilmiyorsanız buradaki makaleye gözatın!
Cevap yaz