🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ فراز صالحی
داینامیک کردن متد‌های route
امیر صالحی حل شده توسط امیر صالحی

سلام , 

 

از آموزش عالی استاد لقمان متشکرم.

 

برای متد‌های روت که تا این مرحله که با استاد پیش رفتیم , گفتم بد نیست که متد‌های روتمون رو داینامیک کنیم.

در اینجا کدش رو میزارم :

<?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 گذاشتم ولی شما اونو به عنوان یک ثابت داخل کلاس تعریف کنید

 

بهترین پاسخ
امیر صالحی ۲۶ اردیبهشت ۱۴۰۰، ۱۶:۵۵