دسته بندی : زبان برنامه نویسی PHP چهارچوب MVC

جلسه دوم | ساخت یک پروژه mvc در php

خوب آموزش جلسه یک شروع برنامه نویسی mvc بود ولی برنامه نویسی طبق چارچوب همین جا ختم نمیشه و باید روش های دیگه ای هم یاد بگیریم یکی از این روش ها route نویسی هستش خب .

ساخت Route :

یکی از بخش های مهم برنامه نویسی mvc روت هستش که کار parse کردن و بخش بخش کردن اطلاعات url رو بر عهده داره تو فریم ورک لاراول روت نویسی خیلی تمیزی استفاده شده مثلا :

class Route {
	
	public static $routes = [] ;
	public static $flag = 0  ;
	
	public static function __callstatic($method , $args){
		$explode = explode( "@" , $args[1] ) ;
		static::$routes[] = [
			'type' => $method  ,
			'url'    => trim( $args[0] , "/" ) , 
			'controller' => $explode[0] ,
			'method' => $explode[1] ,
		];
		static::$flag ++ ;
		return new self() ; 
	}
	
	public function name( $value ){
		static::$routes[static::$flag - 1]['name'] = $value ;
	}
}
Route::get("/" , "[email protected]");
Route::get("/post" , "[email protected]")->name("main")  ;

کار این متد اینه وقتی که یک متد static فراخونی شد بیا نام متد و آرگومان های که وارد این متد شدن رو دریافت کنه خوب چطور از این متد استفاده کنیم ؟! کافیه ما کل اطلاعات که داریم به route میدیم داخل یک ارایه ذخیره کنیم ! مثلا :

خب شما داخل این کلاس چیزی به اسم __callstatic میبینید تمام وظایف اصلی و درج در متغییر ما رو باید این متد انجام بده خوب ما اینجا یک متغییر به اسم $flag داریم این متعییر منظورش اینه که من دارم به index جاری در متغییر $routes اشاره میکنم ! زمانی این به کارمون میاد که ما میخواییم اطلاعات بیشتری به روت جاریمون پیوند بزنیم .

خب اگه در آخر کد های بالا از Route::$routes یه var_dump بگیرید میفهمید ما چی از class بالا خروجی میگیریم ! این پروپرتی رو ما باید تو هر درخواستی که به فایل index.php ارسال میشه انالیز کنیم ! به راحتی میتونیم اسم کنترلر و متد کنترلر رو از ارایه بگیریم و بهش متصل شیم میگید نه نگاه کنید : )

خب یک بار کد ها رو بررسی میکنیم و میبینیم که چه چیز های باید اضافه کنیم :

class Route {
	
	public static $routes = [] ;
	public static $flag = 0  ;
	public static $baseFolder = "mvc" ;
	
	public static function __callstatic($method , $args){
		$explode = explode( "@" , $args[1] ) ;
		static::$routes[] = [
			'type'       => strtoupper($method)  ,
			'url'        => trim( $args[0] , "/" ) , 
			'controller' => $explode[0] ,
			'method'     => $explode[1] ,
		];
		static::$flag ++ ;
		return new self() ; 
	}
	
	public function name( $value ){
		static::$routes[static::$flag - 1]['name'] = $value ;
	}
	
	public static function run()
	{
		//* گرفتن url فعلی *//
		$currentUrl    = parse_url( $_SERVER['REQUEST_URI'] , PHP_URL_PATH );
		$currentUrl    = str_replace(static::$baseFolder , "" , $currentUrl);
		//* از بین بردن اسلش های اول یا آخر *//
		$currentUrl    = trim( $currentUrl , "/") ; 
		
		//* گرفتن متد فعلی *//
		$currentMethod = $_SERVER['REQUEST_METHOD'] ;
		//* گرفتن تمام روت های ساخته شده توسط ما *//
		$routes = static::$routes ;
		foreach($routes as $route)
		{			
			if( $route['type'] == $currentMethod && $route['url'] == $currentUrl )
			{
				$controller = new $route['controller'] ;
				return call_user_func( [ $controller , $route['method'] ] ) ;
			}
		}
		
	}
	
}
Route::get("/" , "[email protected]");
Route::get("post" , "[email protected]")->name("main")  ;
Route::run() ;

خب پروپرتی static basename مسیر اسکریپت ما نسبت به مسیر اصلی ما هستش ; ما همیشه فایلمون رو تو مسیر localhost یا تو فولدر public_html قرار نمیدیم و بعضی مواقع از sub nested استفاده میکنیم خوب این متغییر برای همینه ! مثلا پوشه که ما باید اجرا کنیم localhost/project هستش خوب ما باید تو این متغییر project رو بنویسیم و یا مثلا localhost/project/mvc ما باید داخل متغییر project/mvc رو بنویسیم ! خوب اینم یه راه استاتیک برای پیدا کردم مسیر فایل نسبت به مسیر اصلی هستش بعدا احتمالا این قسمت رو داینامیک میکنم تا موقع ران کردن دیگه این بخش رو تغییر ندید .

خب داخل اینجا ما بعد یه متد به نام run درست کردیم ! این متد زمانی اجرا میشه که ما تمام route های خودمون رو نوشتیم و میخواهیم اجراشون کنیم ! به همین راحتی ما داخل این متد static::$routes میگیریم که تمام مسیر ها با جزییات داخلش ذخیره شده ! و میبینم ایا متدی که الان داره فراخونی میشه و url فعلی داخل این متغییر وجود داره اگه داشت ما رو به کنترلر متصل میکنه و به متدی که باید ازش اطلاعات بگیریم !

یه تابع به اسم call_user_func که اطلاعات ما رو به متد کلاس وصل میکنه البته با این متد میتونید متغییر بفرستید و تو ساخت wallcard ازش استفاده کنید ! پس این متد خیلی مهمه

به همین راحتی ولی همیشه روت نویسی به اینجا ختم نمیشه ! ما داخل روت نویسی wallcard داریم که بعدا بهش میپردازم و به همین قدر بسنده میکنم .


0| از0رای

مطالب مشابه


0 دیدگاهافزودن