pedia-learning

ورود

گذرواژه‌تان را فراموش کرده‌اید؟

ثبت نام

ثبت نام
انجمن عمومی گسترش فناوری آگو

اگر اولین بار از انجمن بازدید می کنید برای دسترسی کامل به انجمن عضو شوید بعد عضویت قادر به ارسال مطلب و شرکت در بحث خواهید داشت

ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
MVC در PHP قسمت دوم :: Router
11-27-2013, 02:50 PM
ارسال: #1
MVC در PHP قسمت دوم :: Router
سلام

در پست قبلی درمورد معماری MVC و مزایای اون باهم صحبت کردیم.در این پست و چند پست آینده سعی میکنیم باهم یک فریم ورک سه لایه با معماری MVC بسازیم.برای اینکه بتونید با این آموزشها پیش برید باید با مباحث شیء گرایی در PHP آَشنایی داشته باشید.
شروع کار

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

درخواست کاربر به وسیله URL ارسال میشه.به عنوان مثال اگر کاربر روی لینک زیر کلیک کنه :
1 دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.


در این معماری باید به این شکل باهاش بخورد کنیم :

article نام کنترلر

view نام اکشن یا متدی که در کنترلر article قرار داره

و قسمت بعدی پارامترهایی که به متد view ارسال میشه رو مشخص میکنه.

برای مسیریابی یا routing در فریم ورک ها کلاس با نام Routing وجود داره که این کار رو انجام میده.مسیریابی در فریم ورکهای مختلف به روشهای متفاوتی پیاده سازی شده.یکی از مسیریابی دستی استفاده کرده یکی از مسیریابی اتوماتیک و بیشتر فریم ورکها هردو امکان رو به کاربر میدن

ما برای فریم ورکمون از مسیریابی اتوماتیک! استفاده میکنیم. برای پیاده سازی مسیریابی باید در فایل htaccess یه سری خطوط رو اضافه کنیم :

کد php:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond 
%{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
 RewriteRule 
^(.*)$ index.php?url=$[PT,L]
 </
IfModule
در کد بالا همه درخواستها به فایل index.php ارسال میشن و پارامترهای ارسالی به این فایل در متغیر url ذخیره میشن.

یک فایل با نام index.php بسازید و کدهای زیر رو داخلش بنویسید :

کد php:
<?php

define
('DS'DIRECTORY_SEPARATOR);
define('ROOT'dirname(__FILE__));

error_reporting(E_ALL E_NOTICE);

$url $_GET['url'];

require_once (
ROOT DS 'library' DS 'Router.php');

Router::route($url); 

یک ثابت برای نگهداری ” جداکننده پوشه ها ” به این خاطر که در لینوکس و ویندوز این کاراکتر فرق داره. در لینوکس از اسلش ( / ) و در ویندوز از بک اسلش ( \ ) استفاده میشه.

ثابت ROOT برای نگهداری مسیر اصلی فریم ورک

یک فایل در پوشه library با نام Router.php بسازید و محتویات زیر رو داخلش قرار بدید :
کد php:
<?php

class Router {
    static function 
route($url){

        
$urlparts = @explode('/',$url); 

        
$controller = ($urlparts[0] == '' ) ? 'index' $urlparts[0];
        
array_shift($urlparts);
        
$action = ($urlparts[0] == '' ) ? 'index' $urlparts[0];
        
array_shift($urlparts);
        
$param $urlparts;

        if(
file_exists($cFile ROOT.'/app/controller/'.$controller.'.php')){
           include  
$cFile;
        }else{
            die (
'Controller ' $controller .' Not found');
        }
        
$controller ucwords($controller).'Controller';
        
$contollerObj = new $controller();

        if(
method_exists($contollerObj$action)){
            
call_user_func_array(array($contollerObj,$action), $param);
        }else{
            die(
"Action $action not found in $controller Class");
        }

    }


این کلاس برای مسیر یابی به کار میره.یک متد با نام route که یک پارامتر میگیره.پارامتر ارسالی همون url ی هست که کاربر درخواست کرده.

ابتدا url رو به وسیله تابع explode به آرایه تبدیل میکنیم.

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

بقیه قسمتها هم به عنوان پارامتر در نظر گرفته میشن.

بعدش کلاس کنترلر مورد نظر رو از پوشه app/contoller/ لود میکنیم . ازش یک شی میسازیم و با تابع call_user_func_array متد مورد نظر رو با پارامترهایی که داریم اجرا میکنیم.

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

IndexController

و نام فایلش باید اینجوری باشه :

index.php

خی حالا تغریبا قسمت اول کارمون تمومه و برای تست یک پوشه با نام app بسازید و توی این پوشه یکی دیگه با نام controller بسازید.

یک فایل با نام article.php ایجاد کنید و محتویات زیر رو داخلش بنویسید :

کد php:
<?php

class ArticleController{

    function 
index(){
        echo 
'IndexController -> index action';
    }

    function 
view($id){
        echo 
"ID =  $id";
    }


حالا آدرس زیر رو باز کنید :

۱۲۷٫۰٫۰٫۱/article/view/32

خب اولین قسمت کارمون تموم شد در پستهای بعدی لایه مدل و ویو رو هم باهم میسازیم
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان


Persian Translation by MyBBIran.com - Ver: 4.1
Powered by MyBB, © 2002-2024 MyBB Group.
Theme designed by Marvel (Sidebar created by Yaldaram - Yaldaram.com)
Theme Translation by Mt Edition