سلام ,
از آموزش عالی استاد لقمان متشکرم.
برای متد های روت که تا این مرحله که با استاد پیش رفتیم , گفتم بد نیست که متد های روتمون رو داینامیک کنیم.
در اینجا کدش رو میزارم :
<?php
namespace App\Core\Route;
class Route
{
private static $routes = [];
public static function add($method, string $uri, $action = null)
{
$methods = is_array($method) ? $method : [$method];
self::$routes[] = [
'methods' => $methods,
'uri' => $uri,
'action' => $action
];
}
public static function __callStatic($name, $arguments)
{
$uri = $arguments[0];
$action = $arguments ['1'];
self::add($name, $uri, $action);
}
/*
public static function get(string $uri,$action)
{
self::add('get',$uri,$action);
}
*/
public static function routes()
{
return self::$routes;
}
}
تمامی متد های get, post , put , patch , delete ساپورت خواهند شد.
مشکل این روش این هست که هر کسی هر اسمی برای متد استاتیک بزاره اجرا خواهد شد , در حالی که نباید اینطور باشه ..
این کلاس باید طوری طراحی بشه که فقط از 5 متد منتخب http بشه استفاده کرد.
اگر راه حلی به ذهنتون می رسه , خیلی خوشحال می شم که در اینجا مطرح کنید.
سلام و احترام
از in_array استفاده کنید
<?php
public static function __callStatic($name, $arguments)
{
$verb = array("get", "post", "put", "patch", "delete");
if(!in_array($name, $verb))
throw new Exception('method not supported');
$uri = $arguments[0];
$action = $arguments ['1'];
self::add($name, $uri, $action);
}
حالا من آرایه رو داخل __callStatic گذاشتم ولی شما اونو به عنوان یک ثابت داخل کلاس تعریف کنید