داینامیک کردن متد های route

پرسیده شده
فعالیت 1078 روز پیش
دیده شده 360 بار
2

سلام , 

 

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

 

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

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

<?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 بشه استفاده کرد.

 

اگر راه حلی به ذهنتون می رسه , خیلی خوشحال می شم که در اینجا مطرح کنید.

 

فایل پیوست

Faraz salehi
Faraz salehi

26 اردیبهشت 00

4
حذف شده

سلام و احترام

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

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

26 اردیبهشت 00