PDA

View Full Version : MVC قديم و جديد



H:Shojaei
دوشنبه 11 آذر 1392, 18:10 عصر
با سلام خدمت دوستان
من يه سوال كلي داشتم درباره ساختار جديد و قديم MVC...
ساختار قديم MVC كه من باهاش كار كردم ميگه كنترل همه چيز تو دست Controller هست و از هرجا به هرجا اطلاعات بره بايد از Controller عبور كنه (خيلي كلي گفتم ديگه چون معمولا همه ميدوننش).
حالا ساختار كلي از MVC جديد:
الآن مثلا يه كاربر مياد واسه ثبت نام يه فرم تو View بهش نمايش داده ميشه بالاي اين فرم يه متغير Message واسه اين كه به كاربر اطلاع بديم چه كرده echo ميشه بعد اطلاعاتش رو وارد ميكنه و اين اطلاعات ميره به Controller اين لايه بررسي ميكنه كه مثلا فيلدها خالي نباشن و... (validation) (كه البته اگر نخوايم با js اينا رو انجام بديم تو خود ويو) حالا اين اطلاعات فرستاده ميشن به Model و قطعا بايد از طريق Model با يه تابع درج بشن تو ديتابيس خب اين يه نمونه درج اطلاعات.
حالا كاربر مياد و درخواست نمايش پروفايلشو ميده يه فرم داريم يه لينك توشه كه يه تابع از Controller رو صدا ميزنه يه فايل ويو داريم كه فرم نمايشي اين اطلاعات به همراه مقاديري كه يه پروفايل داره رو داريم و متغيرهايي هست كه هر كدوم سر جاي خودش قرار گرفته تا به صورت پويا مقدار دهي بشن و نمايش داده بشه، حالا كاربر مياد و درخواستش رو به Controller ميده Controller تابع مربوطه از Model رو فراخواني ميكنه Model اطلاعات رو استخراج ميكنه و به View ميفرسته اين هم يه نمونه نمايش اطلاعات.
اول اين كه اين ساختا كه نوشتم همون ساختار MVC جديد به طور كامل هست و اشكالي نداره؟
و دوم اين كه چطور فرم رو نمايش بديم و متغير هايي كه تو فرم هست رو با اين مقادير كه تو Model هستن و از ديتابيس در آورديم تركيب كنيم يا اين مقادير رو به View بفرستيم؟
و اين كه وقتي مقادير مثلا يه جدول رو استخراج ميكنيم كه 100 تا سطر داره بايد اين اطلاعات رو در چه قالبي به View بفرستيم و اصلا چطور بفرستيم؟
با تشكر پيشاپيش

sadegh1362
سه شنبه 19 آذر 1392, 16:51 عصر
سلام
بله این ساختاری که شما می گید mvc هست اما به شرطی که کاملا شی گرا پیاده سازی شده باشه ، اگه می خواید اطلاعات رو برای view بفرستید باید فایلی در پوشه lib پروژه داشته باشید که فراخوننده View ها در اون قرارا گرفته شما باید در او تابع به وسیله تابع extract مقدار ها رو به شکل یک آرایه برای view ها ارسال کنید . یعنی قبل از requireکردن به شکل زیر


class View
{
function __construct()
{

}
public function render($name,$data=array())
{
extract($data);
require 'views/'.$name.'.php';
}
}

اونوقت می تونبد در کنترل به وسیله یک تابع render که با this$ صداش می زنید مقدار هارو برای view به صورت زیر :


$this->view->render('viewfolder/' . $str, $arr);

که در اینجا str$ نام صفحه view و arr$ دادهای است که برایش ارسال می کنید. البته همه اینا به شرط است که mvc کاملا شی گرا و دینامیک نوشته شده باشه.

engmmrj
سه شنبه 19 آذر 1392, 17:27 عصر
دوشنبه 11 آذر 1392 18:40 عصر :متفکر:

H:Shojaei
سه شنبه 19 آذر 1392, 22:02 عصر
ممنون دوست عزيز آقاي sadegh1362 (http://barnamenevis.org/member.php?263444-sadegh1362) راستش ساختار mvc رو ميدونم تو قديمو جديدش موندم...
همين كه شما گفتيد:
[اونوقت می تونبد در کنترل به وسیله یک تابع render که با this$ صداش می زنید مقدار هارو برای view به صورت زیر: ]
تو ساختار جديد mvc ميگه وقتي يه كاربر درخواست اطلاعات ميكنه اين ساختار بايد به وسيله ي كنترلر دريافتش كنه بعد اونو به مدل ارسال كنه مدل نتيجه رو به ويو ارسال كنه (حالا اين كه چطور مدل ويو رو لود ميكنه و اطلاعات به صورت پارامتر ارسال ميشن يا مثلا تو يه متغير سراسري قرار ميگيرن نميدونم).
و تو اين روش اين چيزي كه شما گفتيد كه كنترلر ويو رو لود ميكنه اصلا وجود نداره (اگه اشتباه نكنم)...
بازم ممنون

AmirSky
سه شنبه 19 آذر 1392, 22:39 عصر
کنترلر دیتا ها رو از مدل میگیره و با فرمتی که برنامه نویس تعیین میکنه به ویو ارسال میکنه

sadegh1362
چهارشنبه 20 آذر 1392, 09:31 صبح
دوست عزیز آقای H:Shojaei (http://barnamenevis.org/member.php?241637-H-Shojaei) اگه به تاپیک دقت کنید
تابع دومی که نوشتم توضیح دادم که تابع render در کنترلر صدا زده می شه و دیتایی که از طریق arr$ گرفته به view ارسال می کنه .
و اگه حالت نرمال رو در نظر بگیریم شما باید یه فایل bootstarp.php در mvc داشته باشید که شی کلاس های مدل رو می سازه . این در زمانی اتفاق می افته که شما کنترلر هم نام اون مدل رو صدا میز نید .
مثلا وقتی میزنید :
http://yourhost.com/contoller/actionباید هم زمان با فعال شدن کنترلر صدا زده شده مدل هم نام اونم صدا زده بشه و new به شه . تا کنترلر بتونه ازش استفاده کنه . در این حالت هم شی کلاس کنترلر و هم مدل در اختیار شماست و میتونید داده ها رو برای هر دوشون ارسال کنید یا تبادل کنید .

این رو هم به یاد داشته باشید که مدل هیج وقت ویو رو لود نمی کنه و این وظیفه کنترلر برنامه است که ارتباط بین کنترلر و ویو رو برقرار کنه تا بتونه روی داده ها کنترلر داشته باشه یا اونا رو چک یا فیلتر کنه !