$supportedMethods değişkenimin içerisi $uri ye göre hareket ettiğinden $routes eğer varsa ve $check geçiyorsa dolu gelmesi gerekiyor. Normalde link yapımda /ayarlar olarak gittiğimde yada boş bıraktığımda beni direkt if sorgumdaki "message" => "Method desteklenmiyor. Desteklenen methodlar: $supportedMethods" mesajını veriyor ancak burada da $supportedMethods içeriği boş geliyor. Nerede hata yapıyor olabilirim?
<?php
namespace App\Core;
class Route
{
private static array $routes = [];
private static function getUri() : string {
return $_SERVER["REQUEST_URI"];
}
private static function getMethod() : string {
return strtolower($_SERVER["REQUEST_METHOD"]);
}
private static function checkMethod() : void
{
$uri = self::getUri();
$method = self::getMethod();
$routes = self::$routes;
$check = array_key_exists($method, $routes);
$supportedMethods = array_filter($routes, function($item) use ($uri)
{
return array_key_exists($uri,$item);
});
if(!$check || !in_array($method, array_keys($supportedMethods)))
{
$supportedMethods = strtoupper(implode("|",array_keys($supportedMethods)));
echo json_encode([
"message" => "Method desteklenmiyor. Desteklenen methodlar: $supportedMethods"
]);
exit();
}
}
public static function get(string $url, \Closure|string $action) :Route {
self::$routes["get"][$url] = ["action" => $action];
return new self();
}
public static function put(string $url, \Closure|string $action) :Route {
self::$routes["put"][$url] = ["action" => $action];
return new self();
}
public static function post(string $url, \Closure|string $action) :Route {
self::$routes["post"][$url] = ["action" => $action];
return new self();
}
public static function dispatch() : void {
$uri = self::getUri();
$method = self::getMethod();
$routes = self::$routes;
self::checkMethod();
foreach ($routes[$method] as $url => $item)
{
$pattern = "@" . $url . "$@";
if(preg_match($pattern, $uri, $parameters))
{
}
}
}
}
?>