MVC در PHP قسمت چهارم :: View و Controller

سپتامبر 11, 2013 توسط : سعید

سلام

با آخرین قسمت از قسمتهای MVC در PHP در خدمتتون هستم.در این قسمت به لایه  View و Controller میپردازیم.همینطور که در قسمت اول گفتم لایه View وظیفه نمایش دادن خروجی و گرفتن ورودی هارو از کاربر داره.و لایه Controller به پردازش ورودی و خروجی ها میپردازه .

 

میتونید فایلهای این پروژه رو از لینک زیر دریافت کنید :

https://github.com/PHProir/PHProMVC

لایه View

این لایه باید طوری طراحی بشه که بتونه اطلاعات رو از کاربر بگیره و به کنترلر بفرسته و در مقابل بتونه داده هایی که از سمت کنترلر میاد رو به کاربر نمایش بده.برای اینکار ما به یک کلاس نیاز داریم.یک کلاس در مسیر library بسازید و اسمش رو view بزارید :

<?php

class View {

    private $vars = array(); 

    function set($var , $data) {
        $this->vars[$var] = $data;
    }

    function render($view) {
        extract($this->vars);
        include APP_DIR.DS.'view'.DS.$view.'.php';
    }

}

این کلاس دوتا متد داره.یکی متد set که کارش اینه که متغیرهایی رو که میخواید بفرستید به view مورد نظر رو مدیریت میکنه.یکی متد render که نام  view مورد نظر رو از کاربر میگیره و نمایش میده.

دقت کنید که این کلاس خیلی ساده است و برای داشتن یک ویو انعطاف پذیر باید بیشتر روش کار بشه.

حالا یک کلاس دیگه با نام Controller در مسیر library بسازید :

<?php

class Controller {

    protected $view;

    function __construct() {
        $this->view = new View();
    }

}

و کنترلر ArticleController رو از کلاس Controller ارث بری کنید  و متد view رو به شکل زیر تغییر بدید :

<?php

class ArticleController extends Controller{

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

    function view($id){
        $article = Load::model("articles");
        $row = $article->get_row('*' , " pro_id = $id ");
        $this->view->set('data',$row);
        $this->view->render('view');
    }
}

تا اینجا ما اطلاعات رو از دیتابیس گرفتیم و به view ارسال کردیم.حالا باید یک فایل در مسیر app/view با نام view.php بسازید و به شکل زیر میتونید با مقادیر ارسالی کار کنید :

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            echo $data['id'] , ' - ';
            echo $data['body'] , '<br>';
            echo $data['title'] , '<br><hr>';
        ?>
    </body>
</html>

تا اینجای کار ما یک فریم ورک سه لایه داریم.که قسمتهای View و Model و Controller از هم جدا هستن. شیوه کار اکثر فریم ورکها بر همین مبناست اما هر چی بخواید فریم ورک کاربردی تری داشته باشن باید رنگ و لعاب بیشتری بهش بدید.مثلا در فریم ورکهای دیگه در کنار این سه قسمت قسمتهای اضافی مثل plugin و helper و … داریم که به منعطف بودن و کاربردی بودن فریم ورکمون کمک میکنه.

مثلا در لایه ویو میتونید از موتور قالب های مختلف مثل smarty , twig و … استفاده کنید. در کنار این باید فریم ورکی که مینویسید کتابخانه ی بزرگی داشته باشه که تقریبا همه نیازهای کاربر رو جواب بده و بتونه با کمترین کد نویسی از طرف کاربر بهترین نتیجه رو بگیره.

حرف آخر

این دوره از آموزشهای MVC در PHP تموم شد.در این دوره با شیوه کارکرد معماری سه لایه آشنا شدیم و تونستیم در کنار هم یک فریم ورک بنویسیم.هدف از این دوره این بود که اگر از فریم ورکهایی مثل zend , cakephp , laravel , Yii و … استفاده میکنید بفهمید که پشت این فریم ورکها چه اتفاقی داره میافته. حالا که دیدیم این فریم ورکها چطور کار میکنن شاید علاقه داشته باشید که با یکیشون شروع به کار کنید یا حتی شروع به نوشتن یک فریم ورک کنید.

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

از دوستانی که هم که نظر داده بودن ممنونم و از بقیه هم ( مخصوصا اساتید بنده ) میخوام که نظرشون رو بگن . اگر جایی به مشکل برخوردید خوشحال میشم کمک کنم.اگر هم اشتباهی از من سر زده بود تذکر بدید.

موفق باشید

سپتامبر 12, 2013 @ 9:35 ق.ظ

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

پاسخ
سپتامبر 29, 2013 @ 6:56 ب.ظ

سلام دوست عزیز
عالی بود 🙂
خوشم میاد واقعا آپدیت کار میکنید و حرفه ای 😀
ممنون میشم یه مقاله درست و حسابی هم در مورد امنیت تو php بگذارید !
موفق باشید

پاسخ
نوامبر 26, 2013 @ 4:49 ب.ظ

سلام
برای من که کار کردن با این مدل کدنویسی برام تازه ست یکمی گیج شدم
لطفا کد ها رو هم بزارین تا مطمئن شم همه چی رو سرجاش گذاشتم
چون الان مشکل داره

پاسخ
دسامبر 23, 2013 @ 12:35 ق.ظ

سلام
تشکر از آموزشتان که مفید واقع گردید
لطفا فایل همین آموزش را جهت دانلود قرار دهید
با تشکر

پاسخ
دسامبر 31, 2013 @ 10:36 ق.ظ

با سلام. مقاله خیلی خوب و مفیدی بود.
موفق و پیروز باشید.
ممنون.

پاسخ
ژانویه 20, 2014 @ 2:08 ب.ظ

سلام واقعا آموزش مفیدی بود
لطفا آموزش کار با فریم ورک zend رو هم بزارید
خیلی ممنون

پاسخ
فوریه 10, 2014 @ 8:22 ب.ظ

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

پاسخ
مینا نظری
ژوئن 1, 2014 @ 12:05 ب.ظ

سلام خسته نباشید
ممنون از آموزش خوبتون
شما در مورد select در کنترلر توضیح دادین و خیلی خوب عمل کردن اما من درمورد insert کردن نمیتونم از این استفاده کنم یعنی اینکه از تابع insert در کنترلر استفاده کردم اما نتونستم متغیر را در view فراخوانی کنم میشه راهنماییم کنید.

پاسخ
    سعید مقدم زاده
    ژوئن 4, 2014 @ 1:36 ب.ظ

    سلام
    برای اینکه بتونید اطلاعات رو از view به کنترلر مربوطه ارسال کنید باید action فرم رو روی کنترلر تنظیم کنید.
    مثلا شما یک کنترلر با نام user و یک متد با نام add دارید.
    حالا متد فرم رو روی post میذارید و اکشن فرم رو به صورت زیر تنظیم میکنید :

    به اینصورت اطلاعات به متد add از کنترلر user ارسال میشه که میتونید با $_POST بهش دسترسی داشته باشید.
    موفق باشید
    پاسخ
حامد
ژوئن 28, 2014 @ 10:13 ب.ظ

سلام بايد بگم فوق العاده بود. ممنون

پاسخ
علی
جولای 5, 2014 @ 5:20 ب.ظ

بسیار عالی بود
چقدر خوب میشد که ادامه داشت
یه آموزش پروژه محور با MVC
یعنی با همین فریم ورک شروع کنید به ساخت یه سایت با امکان ورود و عضویت و غیره

بازم ممنون

پاسخ
علی
سپتامبر 20, 2014 @ 1:08 ب.ظ

عالی بود
ولی یه مشکل بزرگ داره اونم آدرس دهی نسبی فایل هاست
که آدرس وارد شده رو به ته آدرس فایل می چسبونه
فایل .htaccess مشکل داره

پاسخ
Mehdi Fathi
نوامبر 3, 2014 @ 12:12 ق.ظ

سلام دوست عزیز.خسته نباشید اموزش کاربردی و مهمی بود.فقط یه نکته هنوز برام جا نیوفتاده.اینجور که تحقیق کردم بعضی از پروژه های سنگین رو از فریم ورک های مثه حتی کیک و یا زند استفاده نمیکنن!.و میان خودشون یه فرییم ورک اختصاصی درست میکنن.میشه بگید دلیلش واقعا چیه؟وقتی خیلی از این فریم ورک ها توسطه گروه های برنامه نویسی حرفه ای درست میشه.مخصوصا فریم ورکی مثه زند.پشتیبان عالی هم داره.با تشکر

پاسخ
    Saeed Moqadam
    دسامبر 15, 2014 @ 9:20 ب.ظ

    سلام
    شاید خیلی از امکانات فریم ورک زند به درد خیلی از پروژه ها نخوره. شاید هزینه و زمان نوشتن یه فریم ورک اختصاصی برای یک شرکت کمتر از یادگیری زند باشه. شاید فکر میکنن اگه فریم ورک خودشون باشه کلاس داره 😀 . کلا به نظرم استفاده از فریم ورکها سلیقه ایه و هیچ استانداردی وجود نداره که مثلا بگه اگه پروژه این بود با این فریم ورک بزن .
    موفق باشی

    پاسخ
علی
نوامبر 24, 2014 @ 4:29 ب.ظ

باید بگم واقعا عالی بود.
تشکر فراوان

پاسخ
رضا
ژانویه 24, 2015 @ 6:23 ب.ظ

سلام و درود

قبل از هرچیز باید تشکر کنم از زحمات شما
آموزش خیلی مناسب و روانی بود ، حضور و فعالیت افرادی مثل شما همواره باعث رشد و ترقی افراد مشتاق و گسترش و ورود علوم به ایرانه.

صادقانه از شما متشکرم.

ارادتمند شما رضا./

پاسخ
رضا
ژانویه 28, 2015 @ 2:36 ب.ظ

واقعاً متشکر اما این Framework نه بهینه شده و نه امنه ، من در source علاوه بر یافتن چند vulnerability ، اثری از بهینه سازی ندیدم.

پاسخ
    Saeed Moqadam
    آوریل 20, 2015 @ 9:21 ق.ظ

    دوست عزیز این یه فریم ورکه آموزشیه که نحوه کار فریم ورکهارو آموزش میده.
    اگر یه فریم ورک بخواد بهینه باشه مطمئنا زمان زیادی میخواد که توی چند تا پست نمیشه اون رو توضیح داد.فقط برای آشنایی کاربرا با نحوه کار فریم ورکها این آموزش رو نوشتم
    بازم ممنون از تذکرتون. به خاطر اینکه دوستانی بودن که میخواستن از این فریم ورک در پرژه های خودشون استفاده کنن که به همین علتی که شما گفتین جواب منفی بهشون دادم
    موفق باشید

    پاسخ
leila
فوریه 4, 2015 @ 11:31 ق.ظ

سلام.
من دارم از مدل mvc استفاده ميكنم.و ajax.
يه comboboxدارم كه ميخوام وقتي يكي از مواردش رو انتخاب كردم و دكمه submit قخ زدم اطلاعات به تابع getlistكه تو كنترلر هست فرستاده بشه .اما تابع فراخوني نميشه؟؟؟؟
كدajax به صورت زير هستش:
$(function (){

$(‘#select_type’).submit(function (){
var url=$(‘#select_type’).attr(‘action’);
alert(url);

var data=$(“option:selected”,document.getElementById(“#product_select”)).val();
alert(data);
$.post(url,{‘type’:data},function (output){
console.log(output);
alert(output.id);
for(var i=0 ; i < output.length ;i++){
$('#list').append('’ + output[i].name + “del“);
}

},’json’);

تا خط alert(data); اجرا ميشه
return false;
})
});

پاسخ
فاطمه
دسامبر 5, 2015 @ 11:36 ق.ظ

هیچی که نفهمیدم هیچ !!!!
هر چی بلد بودمم یادم رفت !!!

پاسخ
SHIRIN
می 8, 2016 @ 8:59 ق.ظ

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

پاسخ
    سعید
    می 9, 2016 @ 10:17 ق.ظ

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

    موفق باشید

    پاسخ
Mahyar
می 28, 2017 @ 3:08 ق.ظ

سلام
مدت زیادی بود دنبال یه آموزش کاربردی MVC می گشتم ولی واقعا چیزی دستگیرم نشده بود.
بعد از یه مدت، بصورت کامل از نو آموزش OOP رو دیدم و حالا اینجا آموزش MVC رو خوندم.
خیلی کامل و خوب بود، خطاهای اندکی داشت ولی خب هر کسی که مفاهیم پایه رو بدونه خودش میتونه تکمیل و تصحیحش کنه.
ممنون از آموزشتون، واقعا استفاده کردم و به کارم اومد 3>

پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*