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

شهریور ۲۰, ۱۳۹۲ توسط : سعید

سلام

با آخرین قسمت از قسمتهای 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 و … استفاده میکنید بفهمید که پشت این فریم ورکها چه اتفاقی داره میافته. حالا که دیدیم این فریم ورکها چطور کار میکنن شاید علاقه داشته باشید که با یکیشون شروع به کار کنید یا حتی شروع به نوشتن یک فریم ورک کنید.

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

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

موفق باشید

بازدید : ۱۰۰۳۳

شهریور ۲۱, ۱۳۹۲ @ ۹:۳۵ ق.ظ

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

پاسخ دادن
مهر ۷, ۱۳۹۲ @ ۶:۵۶ ب.ظ

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

پاسخ دادن
آذر ۵, ۱۳۹۲ @ ۴:۴۹ ب.ظ

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

پاسخ دادن
دی ۲, ۱۳۹۲ @ ۱۲:۳۵ ق.ظ

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

پاسخ دادن
دی ۱۰, ۱۳۹۲ @ ۱۰:۳۶ ق.ظ

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

پاسخ دادن
دی ۳۰, ۱۳۹۲ @ ۲:۰۸ ب.ظ

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

پاسخ دادن
بهمن ۲۱, ۱۳۹۲ @ ۸:۲۲ ب.ظ

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

پاسخ دادن
مینا نظری
خرداد ۱۱, ۱۳۹۳ @ ۱۲:۰۵ ب.ظ

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

پاسخ دادن
    سعید مقدم زاده
    خرداد ۱۴, ۱۳۹۳ @ ۱:۳۶ ب.ظ

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

    به اینصورت اطلاعات به متد add از کنترلر user ارسال میشه که میتونید با $_POST بهش دسترسی داشته باشید.
    موفق باشید
    پاسخ دادن
حامد
تیر ۷, ۱۳۹۳ @ ۱۰:۱۳ ب.ظ

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

پاسخ دادن
علی
تیر ۱۴, ۱۳۹۳ @ ۵:۲۰ ب.ظ

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

بازم ممنون

پاسخ دادن
علی
شهریور ۲۹, ۱۳۹۳ @ ۱:۰۸ ب.ظ

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

پاسخ دادن
Mehdi Fathi
آبان ۱۲, ۱۳۹۳ @ ۱۲:۱۲ ق.ظ

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

پاسخ دادن
    Saeed Moqadam
    آذر ۲۴, ۱۳۹۳ @ ۹:۲۰ ب.ظ

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

    پاسخ دادن
علی
آذر ۳, ۱۳۹۳ @ ۴:۲۹ ب.ظ

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

پاسخ دادن
رضا
بهمن ۴, ۱۳۹۳ @ ۶:۲۳ ب.ظ

سلام و درود

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

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

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

پاسخ دادن
رضا
بهمن ۸, ۱۳۹۳ @ ۲:۳۶ ب.ظ

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

پاسخ دادن
    Saeed Moqadam
    فروردین ۳۱, ۱۳۹۴ @ ۹:۲۱ ق.ظ

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

    پاسخ دادن
leila
بهمن ۱۵, ۱۳۹۳ @ ۱۱:۳۱ ق.ظ

سلام.
من دارم از مدل 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;
})
});

پاسخ دادن
فاطمه
آذر ۱۴, ۱۳۹۴ @ ۱۱:۳۶ ق.ظ

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

پاسخ دادن
SHIRIN
اردیبهشت ۱۹, ۱۳۹۵ @ ۸:۵۹ ق.ظ

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

پاسخ دادن
    سعید
    اردیبهشت ۲۰, ۱۳۹۵ @ ۱۰:۱۷ ق.ظ

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

    موفق باشید

    پاسخ دادن

پاسخ دهید

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


*