v2.5.2
Giriş yap

"Deprecated: str_replace(): Passing null to parameter" hatası

coder
131 defa görüntülendi

Herkese merhaba.
Aşağıdaki hatayı alıyorum, sorunu nasıl çözebilirim.

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in

PHP Sürümüm 8.2.13

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

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

// Şu şekilde denedim ama yine aynı hatayı alıyorum.
$url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";

coder
87 gün önce

gokcin hocam url bir fonksiyon üzerinden geliyor.

Tam kodum şu şekilde.


<?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 = $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');
    }
}

Örnek run fonksiyonu kullanımı

run("/blog/goster/{id}","blog@tek_blog");