🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ alireza10up
راه حلی بهتر برای پاس دادن پارامتر‌ها به کنترلر یا کلوژر
جامعه برنامه نویسی وب ایجاد شده در ۱۱ اسفند ۱۴۰۲

سلام رفقا وقت بخیر

 

داخل متد تشخیص روت با ریجکس میتونیم موارد مچ شده رو داخل ارایه روت دریافتی با کلید params قرار بدیم و بعد ریترن کنیم

 

private function routeRegexMached($route): bool|array
{
    $pattern = '/^' . str_replace(['/', '{', '}'], ['\/', '(?<', '>[-%\w]+)'], $route['uri']) . '$/';
    if (preg_match($pattern, $this->request->uri(), $matches)) {
        # append matched in route
        foreach ($matches as $key => $value) {
            if (!is_int($key)) $route['params'][$key] = $value;
        }
        return $route;
    }
    return false;
}

 

در مرحله dispatch شدن هم با این روش موارد دریافت شده رو میتونیم به متد کلاسمون یا کلوژر پاس بدیم و به صورت پارامتر در اختیار اون فانکشن قرار بدیم

 

 # action : closure
 if (is_callable($action)) call_user_func_array($action, array_merge([$this->request], $route['params']));
# action : class method
call_user_func_array([$controller, $method], array_merge([$this->request], $route['params']));

موفق باشید.

محسن موحد ۱۲ اسفند ۱۴۰۲، ۲۳:۱۴