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

سلام چرا از کلاس ریکوئست بصورت گلوبال استفاده کردیم دسترسی بصورت گلوبال دیپندسی ایجاد نمیکنه درون متد هامون؟ خب ما که یک آبجکت از ریکوست تو کنستراکتور روتر داریم میتونیم مقادیرمون رو بصورت مستقیم به ریکوست پاس بدیم و تو کنترلر هم مستقیم به مقادیر دسترسی داشته باشیم

تو کلاس ریکوئستم میشه از مجیک متد __set برای مقدار دهیمون استفاده کنیم

 public function regexMatched($route){
        $pattern="/^".str_replace(['/','{','}'],['\/','(?<','>[-%\w]+)'],$route['uri'])."$/";
        $result=preg_match($pattern,$this->request->uri(),$matches);
        if(!$result){
            return false;
        }
        foreach ($matches as $key=>$value){
            if(!is_int($key)){
            $this->request->$key=$value;
            }
        }
        return true;
    }

دسترسی به مقادیر درون کلاس کنترولر ما

namespace App\Controllers;
use App\Core\Request;
class PostController{
    private $request;
    public function __construct(){
        $this->request = new Request();
    }
    public function single() {
       nice_dump($this->request->slug);
       nice_dump($this->request->cid);
    }
}

سلام و احترام

dependency در کدوم موارد و کجا؟ 

ما مثلا میتونیم request‌ها رو به خود متد‌های پاس بدیم، چیزی که توی فریم ورک‌های معروف استفاده میشه. برای مثال

 

  public function single(Request $request) {
       nice_dump($request->slug);
       nice_dump($request->cid);
    }

که این میشه مبحث composition اگه دوست داشتید دربارش بخونید

امیر صالحی ۰۳ خرداد ۱۴۰۰، ۱۶:۴۴

متدهای اضافه شده به کلاس Request

مقادیر موجود در روت را تو آرایه($_REQUEST)  قرار دادم


	public function setParams($name,$params)
	{
        $_REQUEST[$name] = $params;
        return $this;
    }
    public function __set($key, $value):void
    {
        $this->setParams($key,$value);
    }

بخشی از کلاس روتر که مقادیر موجود در روت‌ها کچ می‌شوند 

 
class Router
{
    private $request;
    private $routes;
    private $current_route;
    private $middleware;
    private $globalMiddleware;
    public function __construct()
    {
        $this->request = new Request();
        $this->globalMiddleware = new globalMiddleware();
        $this->runGlobalMiddleware();
        $this->routes = Route::getRoutes();
        $this->current_route = $this->findRoute($this->request) ?? null;
        $this->middleware = isset($this->current_route['middleware']) ? $this-		  >current_route['middleware'] : null;
        $this->runRouteMiddleware();
    }
    public function findRoute(Request $request)
    {
        foreach ($this->routes as $route) {
            if ($this->regexMatched(($route))) {
                return $route;
            }
        };
        return null;
    }
    public function regexMatched($route)
    {
        $pattern="/^".str_replace(['/','{','}'],['\/','(?<','>[-%\w]+)'],$route['uri'])."$/";
        $result=preg_match($pattern,$this->request->uri(),$matches);
        if(!$result){
            return false;
        }
        foreach ($matches as $key=>$value){
            if(!is_int($key)){
            $this->request->setParams($key,$value);
            }
        }
        return true;
    }

 

کلاس کترولر برای دریافت مقادیر


class PostController{
   
    private  $request;
    public function __construct()
    {
        $this->request = new Request();
    }
    public function single() 
    {
       nice_dump($this->request->slug);
       nice_dump($this->request->cid);  
    }
}
امیر رحمانی ۰۳ خرداد ۱۴۰۰، ۱۷:۱۷