انجمن عمومی گسترش فناوری آگو
MVC در PHP قسمت چهارم :: View و Controller - نسخه‌ی قابل چاپ

+- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir)
+-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1)
+--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13)
+--- موضوع: MVC در PHP قسمت چهارم :: View و Controller (/showthread.php?tid=2211)



MVC در PHP قسمت چهارم :: View و Controller - agotd - 11-30-2013 11:07 PM

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

لایه View

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

کد php:
<?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:
<?php

class Controller {

    protected 
$view;

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



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

کد php:
<?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 بسازید و به شکل زیر میتونید با مقادیر ارسالی کار کنید :

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

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

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