در خواست request global

پرسیده شده
فعالیت 1037 روز پیش
دیده شده 453 بار
0

سلام خسته نباشید
تو این جلسه ما اومدیم request رو نوشتیم 
برای دسترسی به این باید با فراخوانی هر بار global رو صدا بزنیم
اگه امکان داره روش دیگری رو که بشود همجای برنامه در دسترس باشد را مثال برنید
که نیاز به این فراخوانی چند باره نداشته باشد
متشکرم,.’’

فایل پیوست

Mehrzad Tajkarimi
Mehrzad Tajkarimi

1 تیر 00

1
حذف شده

سلام و احترام

میتونید وقتی دارید متد کلاس رو داخل route صدا میزنید چک کنید ببینید متد پارامتری داره و بهش request رو پاس بدید داخل همون route

function need_params($func) {
    $reflection = new ReflectionFunction($func);

    return $reflection->getNumberOfParameters();
}

// use
function foo($arg) {}

echo need_params('foo') > 0 ? 'Needs params' : 'No params';

به این روش میتونید هم چک کنید ببینید اصلا چه پارامترهایی داره، کد زیر یه کد تستیه که ازش ایده بگیرید

public static function fire_theme_method($class, $method)
{
        $fire_args=array();
       
        $reflection = new ReflectionMethod($class, $method);

    foreach($reflection->getParameters() AS $arg)
    {
        if($_REQUEST[$arg->name])
        $fire_args[$arg->name]=$_REQUEST[$arg->name];
        else
        $fire_args[$arg->name]=null;
    }
       
    return call_user_func_array(array($class, $method), $fire_args);
}

و اگه یکی از پارامترهای ورودی متد Request بود میتونید داخل روت همونجا Request رو هم بهش پاس بدید

تمام این کار ها با کمک reflection ها قابل انجامه https://www.php.net/manual/en/class.reflectionfunction.php

فایل پیوست

امیر صالحی

توسط

امیر صالحی

3 تیر 00

حذف شده
سلام در خصوص Reflection PHP تو دوره مثالی زده شده ؟
Mehrzad Tajkarimi

3 تیر 00

0
حذف شده

در واقع این روش به ذهنم رسید به خواستم رسیدم 
ولی بازم اگه روش بهتری است بفرمایید
 


namespace App\Core;

class Request
{
    private static $params;
    private static $rout_params;
    private static $method;
    private static $ip;
    private static $agent;
    private static $uri;

    public  function __construct()
    {
        self::$params = $_REQUEST;
        self::$method = strtolower($_SERVER['REQUEST_METHOD']);
        self::$ip = $_SERVER['SERVER_ADDR'];
        self::$agent = $_SERVER['HTTP_USER_AGENT'];
        self::$uri = strtok($_SERVER['REQUEST_URI'], '?');
    }
    public function set_param($key, $value)
    {
        self::$rout_params[$key] = $value;
    }
    public function get_param($key = null)
    {
        return is_null($key) ? self::$rout_params : self::$rout_params[$key];
    }

    public  static function params()
    {
        return self::$params;
    }
    public  function method()
    {
        return self::$method;
    }
    public  function ip()
    {
        return self::$ip;
    }
    public  function agent()
    {
        return self::$agent;
    }
    public  function uri()
    {
        return self::$uri;
    }
}
فایل پیوست

Mehrzad Tajkarimi

توسط

Mehrzad Tajkarimi

1 تیر 00

0
حذف شده

یه سوال دیگه هم اینگه چرا ما تو router از استاتیک استفاده کردیم ولی تو route استفاده نشده

که مجبور نشیم هر دفعه به شی بسازیم

فایل پیوست

Mehrzad Tajkarimi

توسط

Mehrzad Tajkarimi

1 تیر 00

0
حذف شده

سلام واحترام

 کلاس Route ممکنه چندین بار صدا زده بشه و به خاطر نداشتن دردسرهای new کردن از همون متدهای static داخلش استفاده کردیم، اما کلاس Router فقط یک بار در برنامه استفاده و اجرا میشه و لازم نیست به صورت static داشته باشیمش

 

 

راجب کلاس Request، ما Request رو داشتیم چرا به شکل بالا پیاده سازی کردید؟ دلیل خاصی بوده؟

فایل پیوست

امیر صالحی

توسط

امیر صالحی

2 تیر 00

حذف شده
سلام درواقع سوال من در این مورد بود که به جای فراخاتی global مثل لاراول دسترسی داسته باشم به ریکوست ها
Mehrzad Tajkarimi

2 تیر 00