v2.5.2
Giriş yap

Router Url Gruplama

coder
431 defa görüntülendi

Merhaba arkadaşlar.

Aşağıda paylaştığım router kodu çalışıyor.

Url Yapısı
run('url','controller@method','requestmethod');

Örnek Kullanım
run("/anasayfa","anasayfa@index");
run("/blog/oku/{id}","blog@blogoku");

Şimdi arkadaşlar ben bir url gruplama yapmak istiyorum. Örneğin admin'e ait tüm url'leri gruplamak.
Bunun için şöyle düşündüm.

Bir RunGroup fonksiyonu oluşturup parametre kısmında grup url'sini belirleyip fonksiyon içerisinde normal run fonksiyonunu çağırırım.
İstediğim şey şu. Paramertede belirlemiş olduğum url'yi run fonksiyonuna nasıl otomatik eklettirebilirim?

Şunuda düşündüm. Parametreyi değişken olarak belirleyip her run fonksiyonunda değişkenide kullanmak.

Ama sizlere sormak istiyorum. Belki daha pratik bir yöntemi vardır. Bu bahsettiğim işlemi nasıl yaparız?

Düşündüğüm kod

<?php
RunGroup("/admin"){
    
	// Url'yi bu şekilde çağıracağım
	run('/anasayfa','anasayfa@index','get'); 

	// Ama çıktısının şu şekilde olsun istiyorum
	/admin/anasayfa
	
}
?>

Router Kodlarım

<?php

$route = 0;

function parseUrl()
{
    $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;
}


function run($url, $callback, $methods = 'get')
{
    
    $methods = explode('|', strtoupper($methods));

    if (in_array($_SERVER['REQUEST_METHOD'], $methods))
    {

        $patterns = [
            '{url}' => '([0-9a-zA-Z]+)',
            '{id}' => '([0-9]+)'
        ];

        $url = str_replace(array_keys($patterns), array_values($patterns), $url);

        $request_uri = parseUrl();
        
        if (preg_match('@^' . $url . '$@', $request_uri, $parameters))
        {
            unset($parameters[0]);

            global $route;
            $route += 1;

            if (is_callable($callback)){
                call_user_func_array($callback, $parameters);
            } else {

                $explode    = explode('@', $callback);          // $callback'i controller ve method olacak şekilde parçala.
                $controller = explode('/', $explode[0]);        // controller klasöründe bulunan klasör içerisindeki dosya ismini alabilmek için parçala
                $controller = end($controller);                 // Dosya ismini al
                $method     = $explode[1];                      // Method ismi

                $controllerFile = CONTROLLERS_DIR . strtolower($explode[0]) . '.php';

                if (file_exists($controllerFile)) {

                    require $controllerFile;
                    controller($controller, $method, $parameters);

                }else{
                    echo $controller." dosyası bulunamadı!";
                }

            }

        }
    }

}


function notfound()
{
    global $route;
    if($route == 0)
    {
        header('Location: '.URL.'/404');
    }
}
Cevap yaz
Cevaplar (1)
myazar
1164 gün önce

Biraz karışık bir işlem onun için, şu videoyu baştan sona izlemeni tavsiye ederim. Route konusunda yapmak istediğin herşeyi yapabilirsin.

https://youtu.be/afftda2bnqI?t=2890

Videodaki group konusu 48:10 dakikada başlıyor.