توی mvc روتر و رجیستر چه تفاوتی با هم دارن؟

phpweb

Active Member
توی mvc روتر و رجیستر چه تفاوتی با هم دارن؟

دوستان سرچ هم کردم !
 

Domanjiri

Well-Known Member
سلام

روتر که مشخصه، اما این رجیستر که گفتین اسم دیگه ای نداره؟ یا بگین که کارش چی هست، شاید منظورتون رو متوجه بشم.

موفق باشین
 

phpweb

Active Member
روتر که مشخصه، اما این رجیستر که گفتین اسم دیگه ای نداره؟ یا بگین که کارش چی هست، شاید منظورتون رو متوجه بشم.
توی MVC که من استفاده می کنم، توی این روش که من استفاده می کنم، همه درخواستها به فایل index.php می رن، اونجا یه کلاس که کارش اینکلود کردن فایلهای کنترلر هست اینکلود می می شه، توی کنترلر، کلاسهای مدل و سایر کتابخانه ها مورد نیاز اینکلود می شن.

از اونجاییکه این کلاس کارش پیدا کردن فایلها، کلاسها و کتابخانه ها هست، می شه گفت که در واقع روتر هست.

اما رجیستر: وقتی کلاسهای مربوط به کنترلر و مدل به صورت مجزا هستن، و قراره توی فایلهای جداگانه اجرا بشن، باید همه این کلاسها رو ثبت کنیم تا بتونن از همدیگه استفاده کنن.

البته اینا رو بر حسب تجربه ای که توی کار با این MVC بدست آوردم می گم و نمی دونم که این مطالب که گفتم درست هستن یا نه؟ دوستان حرفه ای تر باید نظر بدن.
 

Domanjiri

Well-Known Member
سلام
منظورتون رو از "ثبت کلاس" و .. نفهمیدم ، در هر حال ....لطفن به دیاگرام زیر نگاه کنید ( تصویر رو توی صفحه جدید باز کنید یا فایل پیوست رو بگیرید):

منبع تصویر: کتاب ZF In Action
این یه نمونه عالی پیاده سازی MVC هست. احتمال داره که چیزی که شما بهش "رجیستر" میگین همون Dispatcher توی نمودار بالا باشه که البته کارش "ثبت کلاس و.." نیست.

تفاوت Router و Dispatcher رو از خوندن عبارت های کوتاهی که داخل پرانتز زیر هر کدوم هست میشه فهمید.

بازم اگه کسی منظور این دوستمون رو متوجه شده، بیاد توضیح بده تا ما هم استفاده کنیم.

موفق باشی
 

پیوست ها

  • MVC.PNG
    MVC.PNG
    37.8 کیلوبایت · بازدیدها: 2
آخرین ویرایش:

phpweb

Active Member
بازم اگه کسی منظور این دوستمون رو متوجه شده، بیاد توضیح بده تا ما هم استفاده کنیم.
شی نام‌نویس (Registry)

رجیستری شی است که مقادیر سراسری می‌توانند از طریق آن بدون نیاز به کلمه کلیدی global ذخیره شوند. با گذر دادن شی رجیستری به کنترلرهایی که آن را نیاز دارند از پیچیده کردن نام متغیرها دوری می‌جویم و متغیرهایمان را به طور امن منتقل می‌کنیم. ما نیازمند به تنظیم متغیرهای رجیستری هستیم تا بتوانیم آنها را به کنترلرها بدهیم. توابع جادویی __set() و __get() برای این منظور ایده‌آل هستند. پس فایل registry.class.php را در پوشه‌ی application باز کنید و کدهای زیر را در ان بنویسید.
ساخت یک ام وی سی

توی آموزش بالا گفته شی نام نویسی یا همون رجیستری. می تونید بخونید ولی فکر کنم که حتما این آموزش رو خوندید.

امیدوارم متوجه شده باشید.
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام

نه متاسفانه، تا حالا این آموزش رو ندیده بودم. چه کلمه عجیبی به کار بردن ( رجیستر ) یعنی من تا حالا نشنیده بودم.

به این متد ها Mutators و Accessors میگن و حالا چیز معروف تر و خودمونی ترش Setters و Getters هست. خُب اینا که کارشون معلومه (از همین اسم های دوم میشه به کاری که انجام میدن پی برد!) .

هیچ شباهت منطقی خاصی با هم ندارن و کلن تعریف این ها (متد های بالا و روتر رو میگم!) رو کنار هم بزارید میشه تفاوت هاشون!:)

شاد باشین
 

k2-4u

Well-Known Member
با آقای phpweb موافق
----
و اینکه

کار Registry در mvc ثبت و نگهر داشتن اطلاعاته (قسمتی از model )
کار rooter همون طور که از اسمش مشخصه به مسیر یابی مربوط میشه (قسمتی از contoroler )
 

phpweb

Active Member
کار Registry در mvc ثبت و نگهر داشتن اطلاعاته (قسمتی از model )
کار rooter همون طور که از اسمش مشخصه به مسیر یابی مربوط میشه (قسمتی از contoroler )
می شه بگید کد زیر روتر هست یا رجیستر؟

همه درخواستهای وب سایت من به اسکریپت زیر می رسن. توی این کلاس از طریق کوئری استرینگ کنترلر مورد نظر مشخص می شه.
PHP:
    private function router_fun()
    {
        require_once(ROOT.DS.'admin'.DS.'core'.DS.'router.php');

        $url = $_SERVER['REQUEST_URI'];
        $url = explode("/" ,$url);
        array_shift($url);

        $uri['controller'] = $url[0];
        //$uri['model'] = $uri['controller'];
        //$uri['lang'] = $uri['controller'];
        array_shift($url);
        $uri['action'] = $url[0];
        array_shift($url);
        $uri['param'] = $url;

        $router = new Router();
        $router->uri = $uri;
        $router->load_controller();
    }

توی کلاس زیر کنترلر، مدل و کتابخانه مورد نیاز اینکلود می شه.

لطفا بگید که کار این کلاس روتر هست یا رجیستر؟

PHP:
    public function load_controller()
    {
        $controller_name = $this->uri['controller'];
        $action = $this->uri['action'];
        $param = $this->uri['param'];
        $model = $this->uri['model'];
        $controller_name = ucwords($controller_name);
        $file = ROOT.DS.'admin'.DS.'controller'.DS."$controller_name".'_controller.php';
         
        if(file_exists($file))
        {
            require_once($file) ; 
            
            $controller = new $controller_name ; 
            
            if(method_exists($controller,$action))
            {
                $controller->{$action}($param[0],$param[1],$param[2],$param[3],
            $param[4],$param[5],$param[6],$param[7]);    
            }
            else
            {
                define('HEADER_SENT', '/router.php?num=404');
            }
        }
        else
        {
            define('HEADER_SENT', '/router.php?num=404');
        }
    }
    /*********************************
    * Load Model
    *********************************/
    public function model($model)
    {
        if(is_array($model))
        {
            array_map(array('Router','load_model'),$model);
        }
        else
        {
            $this->load_model($model);    
        }
    }
    private function load_model($model)
    {
        $file =  ROOT.DS.'admin'.DS.'model'.DS.$model.'.php';
        if(file_exists($file))
        {
            require_once($file) ;
            $this->$model = new $model();
        }
        else
        {
            
        }    
    }
    /*********************************
    * End Load Model
    *********************************/
    

    /*********************************
    * Load LANG
    *********************************/
    public function lang($lang)
    {
        $file = ROOT.DS.'admin'.DS.'view'.DS.'fa'.DS.'msg'.DS.$lang.'.php';
        if(file_exists($file))
        {
            require_once($file) ;
            $this->$lang = new $lang();
        }
        else
        {
            
        }
    }
    /*********************************
    * End Load LANG
    *********************************/
    
    /*********************************
    * Load Library
    *********************************/
    public function library($library)
    {
        if(is_array($library))
        {
            array_map(array('Router','_load_lib_array'),$library);
        }
        else
        {
            $this->_load_lib_array($library);
        }
    }
    
    public function _load_lib_array($library)
    {
        $file =  ROOT.DS.'admin'.DS.'library'.DS.$library.'.php';
        if(file_exists($file))
        {
            require_once($file) ;
            $this->$library = new $library();
        }
        else
        {
            echo "Library not found";
        }        
    }
 

k2-4u

Well-Known Member
این کلاسی که من میبینم هم model توشه هم controller!!
رجیستر هم نمیبینم
رجستر یک تابع است که 2 مقدار ورودی میگیره
اولی نام و دومی مقداری که به اون نام اختصاص داده میشه
یک تابع دیگه هم داره که مقدار رو می خونه

حالا در اینجا
این ]آرایه ها هم ممکنه نقش رجیستر داشته باشن !
چون میشه ریخت توش و ازش خوند
PHP:
 $controller_name = $this->uri['controller'];
        $action = $this->uri['action'];
        $param = $this->uri['param'];
        $model = $this->uri['model'];

متد router_fun هم جزو کنترلره !

جالبه که اینا همش تو یک کلاسه

در کل گیجم کرد جالب نبود !

میدونی همه مواقع استفاده از MVC لازم نیست مخصوصا وقتی اسکریپ کوچیک باشه
یکی از جاهای که دیدم MVC خیلی جالب جواب داده
در joomla بوده
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا