توی MVC که من استفاده می کنم، توی این روش که من استفاده می کنم، همه درخواستها به فایل index.php می رن، اونجا یه کلاس که کارش اینکلود کردن فایلهای کنترلر هست اینکلود می می شه، توی کنترلر، کلاسهای مدل و سایر کتابخانه ها مورد نیاز اینکلود می شن.روتر که مشخصه، اما این رجیستر که گفتین اسم دیگه ای نداره؟ یا بگین که کارش چی هست، شاید منظورتون رو متوجه بشم.
بازم اگه کسی منظور این دوستمون رو متوجه شده، بیاد توضیح بده تا ما هم استفاده کنیم.
ساخت یک ام وی سیشی نامنویس (Registry)
رجیستری شی است که مقادیر سراسری میتوانند از طریق آن بدون نیاز به کلمه کلیدی global ذخیره شوند. با گذر دادن شی رجیستری به کنترلرهایی که آن را نیاز دارند از پیچیده کردن نام متغیرها دوری میجویم و متغیرهایمان را به طور امن منتقل میکنیم. ما نیازمند به تنظیم متغیرهای رجیستری هستیم تا بتوانیم آنها را به کنترلرها بدهیم. توابع جادویی __set() و __get() برای این منظور ایدهآل هستند. پس فایل registry.class.php را در پوشهی application باز کنید و کدهای زیر را در ان بنویسید.
می شه بگید کد زیر روتر هست یا رجیستر؟کار Registry در mvc ثبت و نگهر داشتن اطلاعاته (قسمتی از model )
کار rooter همون طور که از اسمش مشخصه به مسیر یابی مربوط میشه (قسمتی از contoroler )
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();
}
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";
}
}
$controller_name = $this->uri['controller'];
$action = $this->uri['action'];
$param = $this->uri['param'];
$model = $this->uri['model'];