• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
{یه آموزش ساده :) }چه جوری یه فریمورک ساده با استفاده از MVC بسازیم؟!
#1
هو،
سلام علیکم،

یه ترجمه ساده،شاید به درد بعضیا (اول خودم Smile ) بخوره:
منبع:http://www.henriquebarroso.com/how-to-create-a-simple-mvc-framework-in-php/

---------

MVC در اصل قبلنا برای نرم افزارهای دکستاپ استفاده میشد،ولی با رشد زبانهای تحت وب شاهد فریمورکهایی بودیم که از این معماری استفاده کردن.
من فکر میکنم(مترجم:من نه! نویسنده مطلب) که اولین بار آقای David Heinemeier Hansson صاحب Ruby On Rails بود که یه همچین دیدی نسبت به وب داشت،کسی که برا اولین بار این معماری رو توی وب به کار برد.
MVC به طور خلاصه یه راه موثر،ترو تمیز و سریع برای تفکیک کدHTML و کد برنامه ست.
MVC یعنی : Model – View – Controller. مدل،نما،کنترلر
Model: این قسمت مسئول مدیریت اطلاعاته،دستورات SQL،کار با دیتابیس جزو این قسمتن.
View: اینم رابط کاربریمون رو نشون میده،که اینجا میشهHTML,CSS,JavaScript و این چیزا.
Controller: مغز و قلب مغماری MVC این قسمته،این جایی که همه ی ورویها رو شامل میشه،کنترلر یه رابط بین دو قسمت بالاست.
این یه طرح ساده از MVC هستش:

   
1-کاربر تایپ میکنه : http://www.umsite.com/blog
2-فریمورک کنترلر blog.phpرو فراخوانی میکنه
3-کنترلر اطلاعات رو پردازش و قالب بندی میکنه
4-اینجا مدل اطلاعاتی رو که کنترلر نیاز داره رو بهش میده
5-کتنرلر اطلاعات گرفته رو با فرمت خواص خودش میده به ویو
6-دست آخرم کنترلر ویو رو فراخوانی میکنه اطلاعاتو میگیره و خروجی رو میفرسته برا مرورگر.
نه تنها همه فریمورکهایی که با MVC نوشته شدن یه همچین روشی دارن بلکه تقریبا اساس فریمورک ما تو این آموزش هم همینه.
خب! بریم سر آموزش،اول ساختار پوشه هامونو درست کنیم:
کد پی‌اچ‌پی:
./my_mvc
./my_mvc/application
./my_mvc/application/controller
./my_mvc/application/model
./my_mvc/application/view 
حالا ساختا فایلهامون:
/.htaccess
قبل هرچیزی ما باید همه درخواست ها رو به ورودی فریمورکمون هدایت کنیم،این کار رو با این فایل و دستورات زیر انجام میدیم:
کد پی‌اچ‌پی:
RewriteEngine On
RewriteBase 
/my_mvc/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
RewriteRule 
^(.*)$ index.php/$[L

فقط یه نکته: تو تنظمیات آپاچی mod_rewrite رو جهت اجرای این کدها فعال کنید.
/index.php
Index.php وروی ماست،هردرخواستی که کاربر میفرسته از این وروی انجام میشه، (چه درخواست درست چه اشتباه،که اشتباهش از طریق .htaccess بازم به index.phpهدایت میشه ):
کد پی‌اچ‌پی:
//Define our site URL
define("BASE_PATH""http://localhost");

//Define our basepath
$path "/my_mvc";

//Take the initial PATH.
$url $_SERVER['REQUEST_URI'];
$url str_replace($path,"",$url);

//creates an array from the rest of the URL
$array_tmp_uri preg_split('[\\/]'$url, -1PREG_SPLIT_NO_EMPTY);

//Here, we will define what is what in the URL
$array_uri['controller']     = $array_tmp_uri[0]; //a class
$array_uri['method']    = $array_tmp_uri[1]; //a função
$array_uri['var']        = $array_tmp_uri[2]; //a variavel

//Load our base API
require_once("application/base.php");

//loads our controller
$application = new Application($array_uri);

$application->loadController($array_uri['controller']); 
/application/base.php
این کلاس وجودش الزامیه،چون اینجاست که کنترل و مدل و ویو لود میشن.
کد پی‌اچ‌پی:
class Application
{
    var 
$uri;
    var 
$model;

    function 
__construct($uri)
    {
        
$this->uri $uri;
    }

    function 
loadController($class)
    {
        
$file "application/controller/".$this->uri['controller'].".php";

        if(!
file_exists($file)) die();

        require_once(
$file);

        
$controller = new $class();

        if(
method_exists($controller$this->uri['method']))
        {
            
$controller->{$this->uri['method']}($this->uri['var']);
        } else {
            
$controller->index();
        }
    }

    function 
loadView($view,$vars="")
    {
        if(
is_array($vars) &&ampcount($vars) > 0)
            
extract($varsEXTR_PREFIX_SAME"wddx");
        require_once(
'view/'.$view.'.php');
    }

    function 
loadModel($model)
    {
        require_once(
'model/'.$model.'.php');
        
$this->$model = new $model;
    }

شاید باورتون نشه،ولی ما الآن یه فریم ورک فوق العاده ساده و سبک درست کردیم! Smile
خیلی سخت نبود،بود؟!
خب بریم از این فریمورکمون بهره ببریم،برای ساختن یه کنترل و یه مدل و دوتا ویو.

/application/controller/blog.php
Blog.php اسم کنترلر ماست،هروقت که یه همچین درخواستی میاد:
http://localhost/my_mvc/blog/
کلاس Aplication درخواست رو فیلتر میکنه و کنترلر blog.php رو لود میکنه.
کد پی‌اچ‌پی:
class Blog extends Application
{
    function 
__construct()
    {
        
$this->loadModel('model_blog');
    }

    function 
index()
    {
        
$articles $this->model_blog->select();
        
$data['articles'] = $articles;
        
$this->loadView('view_blog',$data);
    }

    function 
add($title="")
    {
        
$data['title'] = $title;
        
$this->loadView('view_blog_add',$data);
    }


اگر دقت کرده باشید ما توی تابع سازنده ی این کلاس میتونیم مدلهایی رو که نیاز داریم رو لود کنیم برای استفاده مون،
که در این مورد من مدل model_blog رو فراخوانی کردم که از مسیر ./application/model/model_blog.php لود خواهد شد که بعدا میبینید.
خب به صورت پیشفرض این کلاس تابع index رو اجرا میکنه،ولی اگه درخواستمون اینجوری باشه: http://localhost/my_mvc/blog/add
کلاس blog تابع add رو فرخوانی میکنه،ساده ست نه؟! Wink
تو هر تابعی از کلاس ما میتونیم توابع مدل رو هم صدا بزنیم یا متغیرهایی رو که تو ویو استفاده میشه رو تعریف کنیم،با یه نگاه دقیق به تابع index ما این موارد رو میبینیم:
.فراخوانی تابع select از model_blog.php
.ساختن آرایه ای از متغیرها
.لود یه ویو با پارامتر آرایه ای از متغیرها.


/application/model/model_blog.php
کد پی‌اچ‌پی:
class model_blog extends Application
{

    function 
__construct()
    {
        
//do something, DB connections, etc..
    
}

    function 
select()
    {
        return array(
"title 1","title 2","title3");
    }

این کلاس مسئول تعامل با دیتابیسه،تو این مدل من یه تابع ساده با نام Select برای شبیه سازی برگشت داده از دیتابیس ساختم که از آرایه برای برگشت داده استفاده میکنه.
/application/view/view_blog.php
کد پی‌اچ‌پی:
<html>
    <
head>
        <
title>My Blog</title>
    </
head>
    <
body>
        <
h1>My Blog</h1>

        <?foreach(
$articles as $article):?>
            <h3><?=$article?></h3>
        <?endforeach?>
    </body>
</html> 

/application/view/view_blog_add.php
کد پی‌اچ‌پی:
<html>
    <
head>
        <
title>My Blog</title>
    </
head>
    <
body>
        <
h1>My Blog</h1>
        <
h3>Title:</h3>
        <
input type="text" value="<?=$title?>">
    </
body>
</
html
نهایتا همونطور که قبلا گفتم ما دو تا ویو دارم،اینا خروجی نهایی رو نمایش خواهند داد،البته به صورت HTML.

-------------
پ.ن:

-اجرا:http://localhost/my_mvc/blog/add/salam
-در ضمن نویسنده از شورت تگ یوز کرده.
کد:
<? ?>
-تست شده و مثل ساعت کار میکنه Wink
کدهای برنامه:


.zip   my_mvc.zip (اندازه 3.14 KB / تعداد دانلود: 49)

یا زهرا س

اللهم صل علی محمد و آل محمد و عجل فرجهم

افلاطون را گفتند چرا هرگز غمگین نمیشوی؟
گفت :دل برآنچه نمی ماند،نمی بندم.
  پاسخ
#2
علیرضای عزیز کیفور شدیم Blush
راستش MVC پیچیده نیست
یا باید با تجربه بهش برسی یا با مهندسی و تجربه!
بهرحال شما وقتی بتونید MVC رو درک کنید هر جور که بخواید می تونید تعریفش کنید
MCV یا CVM مهم که باشه قواعد رو رعایت کنید ...
  پاسخ
تشکر شده توسط : Goback Padideh molana
#3
(۱۳۹۰ خرداد ۰۳, ۰۸:۲۳ ب.ظ)oia نوشته: امید عزیز کیفور شدیم Blush
راستش MVC پیچیده نیست
یا باید با تجربه بهش برسی یا با مهندسی و تجربه!
بهرحال شما وقتی بتونید MVC رو درک کنید هر جور که بخواید می تونید تعریفش کنید
MCV یا CVM مهم که باشه قواعد رو رعایت کنید ...
خوشحالم مقبول افتاد استاد.

اللهم صل علی محمد و آل محمد و عجل فرجهم

افلاطون را گفتند چرا هرگز غمگین نمیشوی؟
گفت :دل برآنچه نمی ماند،نمی بندم.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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