# زبان های اسکریپتی > PHP > آموزش: MVC به زبان ساده

## MMSHFE

با سلام خدمت دوستان محترم، یک اسلاید آموزشی درست کردم که میخواستم توی نشست بعدی نهاد توی بابل درموردش یک کارگاه یکروزه تشکیل بدم که از اونجا که تا حالا نظرسنجی طوری پیش رفته که بیشتر تمایل داشتن یک پروژه عملی توی کارگاه انجام بشه، تصمیم گرفتم این اسلاید رو برای دانلود و مطالعه در اختیار دوستان بگذارم.
لینک دریافت:
*http://www.barnamenevis.ir/articles/67/MVC*
خوشحال میشم نظر دوستان رو درباره این آموزش بدونم. اگه احیاناً سؤالی هم بود توی همین تاپیک مطرح کنید.

----------


## farazsahebdel

> با سلام خدمت دوستان محترم، یک اسلاید آموزشی درست کردم که میخواستم توی نشست بعدی نهاد توی بابل درموردش یک کارگاه یکروزه تشکیل بدم که از اونجا که تا حالا نظرسنجی طوری پیش رفته که بیشتر تمایل داشتن یک پروژه عملی توی کارگاه انجام بشه، تصمیم گرفتم این اسلاید رو برای دانلود و مطالعه در اختیار دوستان بگذارم.
> لینک دریافت:
> *http://www.barnamenevis.ir/articles/67/MVC*
> خوشحال میشم نظر دوستان رو درباره این آموزش بدونم. اگه احیاناً سؤالی هم بود توی همین تاپیک مطرح کنید.


این لینک که خرابه  :ناراحت:

----------


## MMSHFE

لینک سالمه. به لطف برخی دوستان، پهنای باند ماهانه سایت تمام شده و درنتیجه باید تا اول ماه میلادی بعدی (گمونم فردا باشه) صبر کنید تا دوباره سایت بیاد بالا!

----------


## engmmrj

> لینک سالمه. به لطف برخی دوستان، پهنای باند ماهانه سایت تمام شده و درنتیجه باید تا اول ماه میلادی بعدی (گمونم فردا باشه) صبر کنید تا دوباره سایت بیاد بالا!


 یعنی برخی دوستان dos attack زدند ؟

----------


## $ M 3 H R D A D $

اسلاید و حای دیگه ایلود کنید زمان طلاست !

----------


## navid3d_69

من 10 تا فیلم دارم البته زبان انگلیسی هست از ابنتدا mvc رو یاد میده تا ajax در mvc و یک cms کوچک با mvc درست می کنه کاملا هم خوب آموزش میده خودم می خواستم به صورت یک pdf فارسی درست کنم یک مقداری هم انجام دادم ولی وقت ندارم اگر کسی انجام میده با مدیران هماهنگ کنه من این فیلم هارو آپلود کنم که دانلود کنه و آموزش رو توی سایت بزاره

----------


## Veteran

اگه بزاری که خیلی خوبه

----------


## SilverLearn

> اسلاید و حای دیگه ایلود کنید زمان طلاست !


منم موافقم :)

----------


## MMSHFE

فایل اسلاید به پست اول همین تاپیک ضمیمه شد.

----------


## MMSHFE

از دوستان عزیزی که آموزش رو دریافت و مطالعه کردن تقاضا میکنم اگه نظری درموردش دارن، بیان کنن چون همین سبک آموزش (ازنظر سادگی بیان) قراره مبنای کار در ادامه تاپیک آموزش مرحله به مرحله PHP قرار بگیره و اونجا، با همین روند، MVC رو بطور کامل و با جزئیات بیشتر آموزش بدیم.

----------


## rezaonline.net

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

----------


## MMSHFE

این آموزش در ساده ترین حالت بوده. توی آموزش جامع که بعداً میگذارم، موارد مختلفی مثل Singleton و Registry و Factory و... همه به تفصیل و با مثال توضیح داده میشه.

----------


## eshpilen

> از دوستان عزیزی که آموزش رو دریافت و مطالعه کردن تقاضا میکنم اگه نظری درموردش دارن، بیان کنن چون همین سبک آموزش (ازنظر سادگی بیان) قراره مبنای کار در ادامه تاپیک آموزش مرحله به مرحله PHP قرار بگیره و اونجا، با همین روند، MVC رو بطور کامل و با جزئیات بیشتر آموزش بدیم.


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

تشویق شدم که وارد MVC بشم.
شاید آموزشهای قبلی بخاطر همون اشتباهات که شما اشاره کردید و نقص و ابهامهایی که داشتن باعث شده بودن بقدر کافی به MVC علاقمند نشم (متوجه میزان کارایی و اهمیتش در زمینهء رفع مشکلات برنامه های بزرگ و پیچیده نشده بودم).

----------


## eshpilen

راستی یه جایی همین امروز میخوندم که کامپوننت گرایی و MVC با هم رابطهء چندان خوبی ندارن.
یعنی MVC طراحی سیستمهای کامپوننت رو خیلی دشوارتر میکنه ظاهرا.
البته  به این هم اشاره کرده بود که حالا این مبحث کامپوننت هم همه چیز نیست و  لزومی نداره اصلا سیستم کامپوننتی باشه (بخصوص در وب ظاهرا).
حالا من نمیدونم دقیقا منظور چیه.
اصولا باید اول کامپوننت و اینها رو تعریف و روشن کنیم.
یعنی کامپوننت چیه، و مثلا فرقش با پلاگین و ماجول و Addon و اکستنشن چیه و چرا MVC طراحی کامپوننت رو دشوار میکنه.

----------


## amin7x

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

----------


## miladwwe2013

اموزش عالی بود!

میشه ی اموزش cmsمتوسط با mvcمثال بزنید؟
ممنون اقای شهرکی

----------


## navid3d_69

> آموزش خوبی بود.
> راستی آقای شهرکی میخواستم بدونم اون کتابی معرفی کردید از انتشارات Apress هست؟


فکر می کنم Apress باشه من نمی دونم چه کتابی رو معرفی کردند ولی یکی از بهترین کتاب های MVC برای انتشارات Apress هست توی google book هم می تونین رایگان بخونین

----------


## Veteran

من توی MVC متد هارو همه استاتیک میزارم
به نظر شما صحیح هست ؟
======
نوید فیلمایی که گفتی رو میزاری ؟

----------


## MMSHFE

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

----------


## MRmoon

آقاي شهركي ميشه اون cms ساده اي ه در جلسات 7 و 8 آموزشتون ساخته بودين با MVC بنويسين ؟؟؟؟

چون اونجوري بهتر ياد ميگيريم.

بعد من يه جا خونده بودم MODEL براي دسترسي به ديتابيس هست ... يعني اينا اشتباه آموزش داده بودن؟

----------


## MMSHFE

نه اشتباه نیست. من هم که گفتم Model برای دسترسی به دیتابیس هست.

----------


## MRmoon

> نه اشتباه نیست. من هم که گفتم Model برای دسترسی به دیتابیس هست.


پس ويو رو بايد خارج از كنترلر صدا بزنيم؟

----------


## MMSHFE

بله، همه کلاسها (شامل model و view و controller) بیرون از این عناصر (توی فایل اصلی که معمولاً index.php هست) فراخوانی میشن. منتها کنترلر به مدل و ویو به هر دو شئ دیگه دسترسی داره تا درصورت نیاز، از کنترلر بخواد به مدل دستور بده داده های خاصی رو در اختیارش بگذاره.

----------


## MRmoon

> بله، همه کلاسها (شامل model و view و controller) بیرون از این عناصر (توی فایل اصلی که معمولاً index.php هست) فراخوانی میشن. منتها کنترلر به مدل و ویو به هر دو شئ دیگه دسترسی داره تا درصورت نیاز، از کنترلر بخواد به مدل دستور بده داده های خاصی رو در اختیارش بگذاره.


آقاي شهركي ميشه اين رو انجام بديد؟



> آقاي شهركي ميشه اون cms ساده اي ه در جلسات 7 و 8 آموزشتون ساخته بودين با MVC بنويسين ؟؟؟؟


اين طوري يه مثال عملي هم هست ...

----------


## Yuness Mehdian

با تشکر از آقای شهرکی خیلی آموزش ساده و مفیدی بود.از دوستان کسی هست که این کتاب رو گیر آورده باشه؟ (pro PHP MVC)

----------


## spiderman200700

Pro PHP MVC
http://uploaded.net/file/mp2uz9o7

----------


## arta.nasiri

> آقاي شهركي ميشه اون cms ساده اي ه در جلسات 7 و 8 آموزشتون ساخته بودين با MVC بنويسين ؟؟؟؟
> 
> چون اونجوري بهتر ياد ميگيريم.
> 
> بعد من يه جا خونده بودم MODEL براي دسترسي به ديتابيس هست ... يعني اينا اشتباه آموزش داده بودن؟


در اصل Model برای دسترسی به داده هامون چه در دیتابیس و چه در آرایه ها و امثال ایناست!!

----------


## navid3d_69

> من توی MVC متد هارو همه استاتیک میزارم
> به نظر شما صحیح هست ؟
> ======
> نوید فیلمایی که گفتی رو میزاری ؟


بله می زارم تا یک هفته دیگه الان سرم خیلی شلوغ هست

----------


## MMSHFE

> آقاي شهركي ميشه اين رو انجام بديد؟
> اين طوري يه مثال عملي هم هست ...


 اگه خدا بخواد و فرصت کنم، توی خود تاپیک آموزش PHP از جلسه 16 به بعد که به MVC اختصاص داره (جلسه 15 تکمیل و جمع بندی مباحث شئ گرایی هست)، همون CMS رو با اصول و استانداردهای جدید (HTML5 و CSS3 و MVC و...) بازنویسی میکنیم.

----------


## Variable

سلام . خیلی ممنون . ایا باز ادامه داره ؟
خیلی خوب بود . منتها من یک خطا میگیرم . نمیدونم دلیلش چیه

----------


## arta.nasiri

> سلام . خیلی ممنون . ایا باز ادامه داره ؟
> خیلی خوب بود . منتها من یک خطا میگیرم . نمیدونم دلیلش چیه


سلام
کدتون درسته. فقط چک کنید که قبل از EOT پایانی هیچ whitespaceای وجود نداشته باشه.

ولی تو عکسی که گذاشتین 2 تا خطا وجود داره، بهتره کدتون رو اینجا قرار بدید که بررسی کنیم

----------


## redhat2

دوستان من این کد پیاه را هم برای MVC نوشتم ، یه MVC ساده هستش ، اگه  میخواید می تونید بررسیش کنید و و اگه سوالی هم داشته باشین می تونم به شما  پاسخ بدم ، راستی اگه دیدین که میتونه بهترش بشه یا یه جاهایی را بد رفتم ،  ممنون میشم که راهنماییم کنید .

----------


## MMSHFE

> خیلی خوب بود . منتها من یک خطا میگیرم . نمیدونم دلیلش چیه


 دلیلش اینه که بعد از EOT>>> احتمالاً توی کد شما Space اضافه تایپ شده. دقت کنید که بعد از Delimiter توی خط شروع HereDoc و قبلش توی خط پایانی، هیچ Whitespace Character خاصی (شامل Tab و Space و...) نباید وجود داشته باشه.

----------


## habibvafapour

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

----------


## MMSHFE

این تصویر مربوط به ساختار قدیمی MVC هست و ساختار جدید، همون تصویری هست که توی اسلاید گذاشتم و توی ویکیپدیا هم در صفحه MVC گذاشته شده.

----------


## jamejam123

سلام من تازه شروع به یادگیری php کردم
mvc یاد بگیرم خوبه یا شی گرا
فرق این دوتا چیه

----------


## Veteran

برای پیاده سازی معماری MVC باید اول شی گرایی بلد باشیم

----------


## MMSHFE

البته یادگیری شئ گرایی کمک خیلی زیادی توی اجرای بهتر MVC میکنه ولی لزوماً ضرورتی نداره حتماً از شئ گرایی استفاده بشه و MVC رو بصورت Procedural هم میشه مورد استفاده قرار داد. اصولاً قدمت MVC بیشتر از OOP هست.

----------


## jamejam123

یه سوال دیگه داشتم
خالی با php هم می شه وبسایت فوق العاده ای ساخت
اونوقت اینا به چه درد می خورن.

----------


## MMSHFE

گویا مطالب رو بطور کامل و دقیق نخوندین. بله دوست عزیز، بدون MVC و OOP و... هم میشه وبسایت فوق العاده ساخت ولی بعد از مدتی اگه پروژه بزرگ بشه و بخواین افزونه های مختلفی بهش اضافه کنید و این بخشها رو مدیریت کنید و کد مرتباً تغییر کنه، اونوقت در بین انبوهی از کدهای نامرتب و بهم ریخته که هر بخش با تمام بخشهای دیگه ارتباط تنگاتنگ و مدیریت نشده داره، گرفتار خواهید شد. Design Patternها برای حل اینگونه مشکلات درست شدن.

----------


## Variable

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

----------


## MMSHFE

توی View باید بگذارین چون بهرحال مربوط به نمایش اطلاعات میشه و مدل فقط وظیفه استخراج اطلاعات از منابع ذخیره سازی مثل فایل و دیتابیس و سایر سایتها و... رو برعهده داره.

----------


## Variable

خب من تو مثال شما فرمم رو اینجوری اضافه کردم . توی فایل 
main.view 
این خط رو اضافه کردم 
$t->Assign('form',$this->model->form);
ودر فایل main.model

$this->form="<form method='GET' action='clicked' >
							id:<input type='text' name='id'/><br />
							user:<input type='text' name='uname'/><br />
							password:<input type='password' name='pass' /><br />
							<input type='submit' />
							</form>";

الان این درست کار میکنه. منتها شما چیجوری این فرم رو تو فایل کلاس view قرار میدید؟

----------


## qartalonline

ممنون آقای شهرکی واقعا عالی بود.

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

----------


## MMSHFE

> خب من تو مثال شما فرمم رو اینجوری اضافه کردم ...


 ببینید، عنصر فرم باید توی کلاس view باشه نه توی کلاس مدل. بعد توی main.view باید بنویسید ;(t->Assign('form', $this->form$
مدل فقط وظیفه استخراج اطلاعات از پایگاه داده ها و یا ذخیره کردن نتایج کارها توی اون رو برعهده داره و اصلاً هیچ چیزی بجز این نباید داخلش باشه (چه فرم، چه هرگونه کد دیگه). تمام اینها وظیفه View هست. کنترلر هم که کارش مشخصه: دریافت ورودیهای کاربر و دستور دادن به مدل برای استخراج داده های مناسب از پایگاه داده ها تا بعداً View از اونها استفاده کنه.

----------


## hadi0x7c7

سلام

شما به این میگید اسلاید ؟ به نظر من که این اصلا شبیه یه اسلاید نیست و بیشتر یه جزوه هستش، البته قصد بدی ندارم ولی تا اونجایی که میدونم توی اسلاید نباید ما بیام کل داستان و از ب بسم الله بگیم البته این ایراد من به طراحی هستش نه به محتوا.

----------


## MMSHFE

دوست عزیز، اگه پست اول رو کامل و با دقت میخوندین، متوجه میشدین که این اسلاید چرا اینطوری شده. قرار بود اول اسلاید باشه و تیتر مطالب داخلش باشه و بعد، توی کارگاه آموزشی درباره اسلایدها توضیح داده بشه ولی بعداً چون موضوع MVC توسط اکثریت اعضا انتخاب نشد، توضیحات رو هم بهش اضافه کردم تا بصورت خودآموز در بیاد. حالا مشکل فقط فرمته؟ PDF بگذارم خوبه؟ بهتره بجای ساختار و ظاهر، درمورد محتوا بحث و تبادل نظر کنیم. اینطور نیست؟

----------


## engmmrj

استاد شما گفتتین بین لایه view و controller ارتباطی وجود ندارد ولی در این کتا چیزی دیگه ایی گفته که کتابشم جدیده.(apress mvc)
ولی تو ویکی پدیا حرف شما رو زد .
http://en.wikipedia.org/wiki/Model%E...0%93controller
البته وقتی زبان رو فارسی میکنی عکس ویکی پدیا عوض میشه که زده view با controller ارتباط داره :
http://fa.wikipedia.org/wiki/%D9%85%...8C%DA%AF%D8%B1
و شما گفته بودی در 1970 اولین بار مورد استفاده قرار گرفته ویکی پدیا زده در سال 1979
mvc.jpg

----------


## engmmrj

ولی این ارتباط جدیدی که شما میگی به نظرم بهتره .
این ارتباط که شما گفتی چه برتری هایی نسبت با اون ارتباط ها داره ؟

----------


## MMSHFE

نه من منظورم دهه 1970 بود. شاید اشتباهاً گفتم سال 1970 اما درهرحال، نسخه انگلیسی ویکیپدیا بروزتره و کتاب Apress هم خیلی جدید نیست و توی حوزه IT تغییرات حتی ممکنه روزانه اتفاق بیفته. بهرحال این ایده اصلی که بخشهای مختلف پروژه از هم جدا باشن، منطق اصلی MVC هست و فکر میکنم راهکار جدید MVC بهتر این هدف رو پیاده سازی میکنه و اگه به این شکل عمل نکنیم، Controllerهای خیلی حجیم و در عوض، Model و View خیلی کوچک خواهیم داشت و عملاً توزیع مناسبی ازنظر بار کاری روی بخشهای مختلف نداریم. اما توی معماری جدید، View که مسئولیت نمایش داده ها رو برعهده داره، بطور طبیعی بزرگتر و پررنگتر از بقیه بخشها خواهد شد و در عین حال، بخشهای مختلف بطور تقریباً متعادل و مساوی در انجام اهداف پروژه دخیل خواهند بود.

----------


## engmmrj

اگر بخواهیم یک لایه اضافه کنیم ارتباط لایه ها به چه صورت میشود . میشه یک مثال بزنید.

----------


## Mohammadxml

> البته یادگیری شئ گرایی کمک خیلی زیادی توی اجرای بهتر MVC میکنه ولی لزوماً ضرورتی نداره حتماً از شئ گرایی استفاده بشه و MVC رو بصورت Procedural هم میشه مورد استفاده قرار داد. اصولاً قدمت MVC بیشتر از OOP هست.


 سلام مهندس شهرکی.روش استفاده از MVC بصورت Procedural چطوریه؟
اگه امکانش هست مثال لاگینی که توی این لینک با استفاده از کلاس گفته رو بصورت Procedural توضیح بدین؟

----------


## parvizwpf

منظور پروسیجر نویسی سمت دیتابیس رو میگید؟

----------


## Mohammadxml

منظورم اینه که در برنامه اصلا از شی گرایی(OOP) استفاده نکنم.
یعنی به صورت کلاسیک برنامه بنویسم.نه اینکه نمیخوام شی گرایی کارنکنم بعدا حتما کار می کنم.

----------


## iranweb91

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

----------


## MMSHFE

> سلام مهندس شهرکی.روش استفاده از MVC بصورت Procedural چطوریه؟
> اگه امکانش هست مثال لاگینی که توی این لینک با استفاده از کلاس گفته رو بصورت Procedural توضیح بدین؟


 توی مثال اون لینک که گذاشتین که یک مشکل عمده وجود داره که توی کامنتهای همون سایت هم اشاره کردم (نوشتن کوئری توی کنترلر و ارسال به مدل برای اجرا). اما درهرحال، مثال فوق رو بدون شئ گرایی (اما به روش صحیح) بازنویسی کردم تا ببینید چطور میشه:
1- View


```
<?php
    if(isset($result) && count($result) > 0) {
        // Login successful, do something here
    }
    else {
?>
<form action="" method="post">
    <?php echo (isset($message) ? '<p>' . $message . '</p>' : ''); ?>
    <table>
    <tr align="left"><th>Username:</th><td><input name="username" type="text" /></td></tr>
    <tr align="left"><th>Password:</th><td><input name="password" type="password" /></td></tr>
    </table>
    <input type="submit" value="Login" />
</form>
<?php
    }
?>
```

2- Model


```
<?php
    function Connect() {  
        $con = mysql_connect('localhost', 'root', '') or die('Connection error');
        mysql_select_db('myDB', $con) or die('Database error');
        mysql_query('SET NAMES \'utf8\'');
        mysql_set_charset('utf8');
        return $con;
    }
    function GetRows($fields) {
        $result = array();
        if(!is_array($table, $fields, $count)) {
            return false;
        }
        $count = (is_int($count) ? intval($count) : 0);
        $con = Connect();
        $table = Escape($table);
        $where = '1=1';
        foreach($fields as $fieldName => $fieldValue) {
            $fieldName = Escape($fieldName);
            $fieldValue = Escape($fieldValue);
            $where .= " AND `{$fieldName}`='{$fieldValue}'";
        }
        $query = mysql_query("SELECT * FROM `{$table}` WHERE ({$where}) ORDER BY `id` LIMIT {$count}");
        if($query && mysql_num_rows($query) > 0) {
            while($row = mysql_fetch_assoc($query)) {
                $result[] = $row;
            }
        }
        return $result;
    }
    function Escape($str) {
        $con = Connect();
        return mysql_real_escape_string($str, $con);
    }
?>
```

3- Controller


```
<?php
    require_once 'model.php';
    if(isset($_POST['username'], $_POST['password'])) {
        $params = array(
            'username' => $_POST['username'],
            'password' => md5($_POST['password'])
        );
        $result = GetRows('users', $params, 1);
        $view = 'login-form.php';
        require_once $view;
    }
?>
```

البته این فقط یک مثاله و قطعاً وقتی پروژه بزرگتر میشه، قدرت شئ گرایی هم بیشتر به چشم میاد چون مباحثی مثل توابع همنام و... مطرح میشه (وقتی همزمان به چند مدل، ویو یا کنترلر نیاز پیدا کنیم) که این مباحث توی شئ گرایی و بخصوص با کمک قابلیت namespace به راحتی قابل رفع خواهد بود.

----------


## Veteran

جناب شهرکی من توی MVC برای هر جدول از دیتابیس یک مدل و یک کنترل به اسم همون جدول دارم.
وقتی اینارو اینکلود میکنم به مشکل بر میخورم.به همین دلیل مجبورم اسم یکی از کلاس هارو تغییر بدم.
امکانش هست که این مشکل برطرف بشه ؟ یعنی ما بتونیم 2 تا کلاس همنام داشته باشیم و موفعه اینکلود به مشکل بر نخوریم ؟!

----------


## MRmoon

> جناب شهرکی من توی MVC برای هر جدول از دیتابیس یک مدل و یک کنترل به اسم همون جدول دارم.
> وقتی اینارو اینکلود میکنم به مشکل بر میخورم.به همین دلیل مجبورم اسم یکی از کلاس هارو تغییر بدم.
> امکانش هست که این مشکل برطرف بشه ؟ یعنی ما بتونیم 2 تا کلاس همنام داشته باشیم و موفعه اینکلود به مشکل بر نخوریم ؟!


 نميشه دوتا كلاس هم نام داشت!

----------


## MMSHFE

با namespace میشه ولی راه درستی نیست. بهتره اسامی واضح و بدون ابهام بگذارین. مثلاً users_model و...

----------


## diaoko89

سلام جناب شهرکی
خسته نباشید
بابت این تاپیک پر ارزش ازتون متشکرم
بنده قبلا در دوران دانشجویی پروژه پایانی ام رو بر اساس معماری سه لایه(mvc) پیاده سازی کردم ولی وقتی این تاپیک رو مطالعه کردم فهمیدم که اشتباهاتی در کارم بوده و خودم خبر نداشتم و از این بابت ازتون متشکرم
سوال برام پیش اومده،میخوام بدونم رابطه معماری سه لایه با برقراری امنیت از دید شما چطوری هست؟آیا تاثیر گذاره یا نه باید از تکنیک های دیگر استفاده کرد برای برقراری امنیت؟منظورم اینه که معماری سه لایه چقدر به امنیت وب سایت کمک میکنه؟
با تشکر

----------


## MMSHFE

بطور مستقیم MVC و کلاً معماری چندلایه تأثیری روی امنیت نداره. منظورم اینه که به خودی خود باعث ایجاد امنیت نمیشه اما از این جهت که به شما کمک میکنه منطق برنامه رو از استخراج اطلاعات و نمایشش جدا کنید، باعث میشه که فکرتون توی کد آزادتر باشه و مباحث امنیتی رو بهتر زیرنظر داشته باشین. مثلاً توی Model تمام کارهای لازم برای امن کردن ورودیهایی که قراره توی کوئری بکار برن و توی دیتابیس ذخیره بشه و... درنظر بگیرین و توی View تمام کارهایی که برای Escapeکردن خروجی که قراره برای کلاینت ارسال بشه انجام بدین تا درمقابل حملاتی مثل JS Injection و... ایمن باشید. تمام این کارها رو هم درحالی میتونید انجام بدین که Controller که منطق پردازش ورودیهای کاربر و انتخاب عملیات مناسب براساس اونها رو داره، دیگه درگیر مباحث امنیتی مثل SQL Injection و امثالهم نمیشه.

----------


## Mohammadxml

سلام آقای شهرکی.ببخشید من اگه بخوام مثال لاگینی که در بالا زحمت کشیدین توضیح دادین رو اجرا کنم یعنی توی پوشه ی www کپی کنم چه فایلهایی رو باید کپی کنم و بعد صفحه ی index.php چی میشه و اینکه اگه بخوام پروژه خودمو با مدل mvc بدون شی گرایی بنویسم جهت توسعه پروژه تمام کدهای من باید داخل این سه فایل ذخیره بشه؟(منظورم اینه ساختارشو بلد نیستم).
مثلا باید کل کدهای طراحی (css ,javascript,jquery)  باید توی قسمت view وارد بشه؟و...

----------


## MMSHFE

باید یک فایل index بسازین با یک مدل، ویو و کنترلر اصلی که index این فایلها رو فراخوانی میکنه و کنترلر اصلی، برحسب پارامترهای ورودی کاربر، مدل، ویو و کنترلرهای دیگه رو صدا میزنه (مثلاً login). برای ساختار ذخیره سازی هم میتونید به اشکال مختلف عمل کنید. مثلاً همه مدلها توی یک پوشه، همه ویوها توی یک پوشه و همه کنترلرها توی یک پوشه جداگانه و اسم فایل هرکدوم، اسم ماژولی باشه که براش درنظر گرفتین. مثلاً:

controllers
    login.php
    logout.php
models
    login.php
    logout.php
views
    login.php
    logout.php

یا اینکه یک پوشه components بسازین و توی اون پوشه، برای هر بخش یک پوشه فرعی بسازین و فایلهاش رو داخلش قرار بدین:

components
    login
        controller.php
        model.php
        view.php
    logout
        controller.php
        model.php
        view.php

یا اینکه همه فایلها رو توی پوشه components بگذارین و اسم هر بخش رو پیشوند اسم فایلهاش بگذارین:

components
    login_controller.php
    login_model.php
    login_view.php
    logout_controller.php
    logout_model.php
    logout_view.php

بهرحال این ساختار، تا حدود زیادی دست خودتونه و مهمتر از اون، منطقی هست که روی MVC حاکمه و باید رعایت کنید.

----------


## Mohammadxml

> باید یک فایل index بسازین با یک مدل، ویو و کنترلر اصلی که index این فایلها رو فراخوانی میکنه و کنترلر اصلی، برحسب پارامترهای ورودی کاربر، مدل، ویو و کنترلرهای دیگه رو صدا میزنه (مثلاً login).


ببخشید این تیکه رو متوجه نشدم.
 اگه لطف کنید محتویات فایل index.php رو  برام بذارین و یا مثال عملی لاگینی که برام نوشتین (به طور کامل) رو برای دانلود بذارین ممنون میشم.

----------


## engmmrj

استاد جواب ما رو نداد ی؟

اگه بخوایم به صورت اختیاری یک لایه یا چند لایه اضافه کنیم باید ارتباط لایه ها رو چه جوری ارتباط بدیم ؟

----------


## MMSHFE

گفتم که، بستگی به طراحی خودتون داره. اینکه لایه اضافه شده برای چه کاری درنظر گرفته شده. مثلاً اگه لایه جدید، وظیفه کار با موتور قالب رو داره، باید بعد از View قرار بگیره یا اگه وظیفه خنثی کردن کدهای مخرب جهت نمایش صحیح توی خروجی رو داره، باید بین Model و View باشه. اما قبل از تمام اینها، باید دید آیا واقعاً اون لایه اضافه لازمه یا میشه توی همین لایه ها قرارش داد؟

----------


## 2undercover

سلام. با توجه به اینکه ارتباطی بین Controller و View وجود نداره توی یک سیستم Login ساده کاربر اطلاعات رو وارد می کنه و Controller بر حسب اطلاعات کار های مربوط به ورود مثل بررسی صحیح بودن و مقدار دهی Session رو انجام میده که حالا دو حالت وجود داره یا ورود موفقه یا ناموفق خب با توجه به چیزی که قبلا گفتم که ارتباطی بین Controller و View نیست لایه ی View باید چه جوری تشخیص بده که ورود موفق بوده یا ناموفق که اطلاعات صحیحو نمایش بده!

آیا Controller باید موفق یا ناموفق بودن رو توی Model ذخیره کنه و View با توجه به چیزی که توی Model هست اطلاعاتو نمایش بده؟!اگه اینجوری بشه ما توی لایه View باید if else داشته باشیم؟

----------


## MMSHFE

ببینید، مسئله دقیقاً همینه که در معماری جدید MVC هیچ اشکالی نداره که View دارای دستورات شرطی و... باشه. اما به شرطی که همونطور که خودتون اشاره کردین، این شرطها صرفاً بررسی یکسری پارامتر باشه که کنترلر تنظیم میکنه و براساس اونها، خروجی View عوض میشه. البته دقت کنید که Controller لزوماً نباید داده های Model رو برای مثال لاگین تغییر بده بلکه خودش میتونه سشن بسازه و توی View وجود/عدم وجود سشن بررسی بشه. این مسئله با ارسال اطلاعات از Controller به View فرق میکنه چون سشن سراسریه و همه بهش دسترسی دارن. یه چیزی مثل متغیرهای سراسری.

----------


## Tarragon

با سلام و تشکر بسیار از زحمات شما یه سوال داشتم:
اینکه یک سری فانکشن ها مثل multihash قرار در چند صفحه مورد استفاده قرار بگیرن جای این فانکشن ها کجاست؟
یعنی کجا قرار ذخیره بشن؟
ممنونم.

----------


## MMSHFE

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

----------


## Mohammadxml

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

----------


## MMSHFE

دوست عزیز، ساختار رو که گفتم دست خودتونه. مهم نحوه کدنویسیه.

----------


## Mohammadxml

سلام ببخشید آقای شهرکی لطف کنید کمی در مورد نحوه کدنویسی(کدنویسی mvc بدون شی گرایی(Procedural ) و با شی گرایی) توضیح بدین و یا سایت هایی جهت آموزش معرفی کنید.
اگه لطف کنید یه مثال عملی (کد نویسی بدون شی گرایی) بذارین ممنون میشم.

----------


## desatir7316

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

----------


## MMSHFE

دوست عزیز، این شکل مربوط به معماری قدیمه. معماری جدید همونطور که توی اسلایدها اشاره شده، کلاً شکل کار رو تغییر داده. هرچند این شکل هم به نظرم اشتباه باشه چون Model فقط از کنترلر دستور میگیره (در هر دو معماری قدیم و جدید) و تفاوت معماری قدیم و جدید در اینه که در قدیم، Controller داده ها رو از Model میگرفت و تحویل View میداد ولی در معماری جدید، View خودش این اطلاعات رو دریافت میکنه و کنترلر این وسط نقشی نداره.

----------


## 2undercover

توی اون نمونه برنامه ای که شما نوشته بودید لایه ی View یک نمونه از شئ Controller رو در اختیار داشت. می خواستم ببینم چه نیازیه که View به Controller دسترسی داشته باشه؟

----------


## MMSHFE

قبلاً بهش اشاره کردم. بخاطر اینکه درصورت نیاز به تغییر داده های Model، از کنترلر بخواد دستورات لازم رو به Model بده.

----------


## Mohammadxml

سلام دوستان یه نگاهی هم به این لینک ها بندازین ببین کدومش برای ساختار mvc بهتره؟
http://anantgarg.com/2009/03/13/writ...mework-part-1/
http://stackoverflow.com/questions/1...re-for-a-forum
http://www.onextrapixel.com/2012/03/...ing-structure/

سلام آقای شهرکی اگه نمونه مثال عملی (لاگین توسط Procedural mvc) از شما درخواست کردم رو نمی تونید بذارید لطف کنید سایت آموزشی معرفی کنید چون من هر چی گشتم با کلاس برنامشو نوشته بودن.شرمنده من نتونستم بنویسمش.

----------


## MMSHFE

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

----------


## Veteran

جناب شهرکی میشه یک نمونه که در اون دیتابیس هم به کار رفته باشه بنویسین ؟
طوری که من فهمیدم برای هر جدول از دیتابیس یک مدل داریم که در این مدل کارهای مربوط به اون جدول مثل اضافه کردن ویرایش و.... انجام میشه
درسته ؟

----------


## Mohammadxml

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



> باید یک فایل index بسازین با یک مدل، ویو و کنترلر  اصلی که index این فایلها رو فراخوانی میکنه و کنترلر اصلی، برحسب  پارامترهای ورودی کاربر، مدل، ویو و کنترلرهای دیگه رو صدا میزنه (مثلاً  login).


این لینکو که برای دانلود گذاشتم نگاه  کنید اگه منظور شما این بود پس لطف کنید بگید، کد logout.php و login.php رو چطوری  باید بنویسم؟
example.rar
 و خواهشا اگه علاوه بر index.php اگه باز لازمه کدنویسی بشه  بگید که چه فایلی و چطوری؟ آقای شهرکی ممنونم میشم این برنامه رو طوری  تکمیلش کنید که وقتی توی پوشه ی www ریختم اجرا بشه.
یه سوال دیگه کدهای java یا css کجا باید زده بشن؟
خدا کنه تونسته باشم منظورمو برسونم.

----------


## MMSHFE

ظرف همین یکی دو روز براتون یک مثال کامل از login و logout با MVC بصورت Procedural آماده میکنم.

----------


## Mohammadxml

سلام آقای شهرکی لطفا در مورد پیاده سازی معاری 3 لایه (three-tier programming) در php هم توضیح و مثال می زنید.

----------


## MMSHFE

این هم از مثال Procedural MVC که قولش رو داده بودم. دقت کنید که این فقط یک مثال خیلی کوچکه که یکی از روشهای پیاد هسازی MVC رو بصورت رویه گرا و بدون شئ گرایی نشون میده و فقط دو جزء Login و Logout رو پیاده سازی میکنه. البته توی همین مثال کوچک هم میشه فهمید شئ گرایی چقدر به ساده شدن این برنامه میتونه کمک کنه. توضیحات لازم درمورد نحوه نصب و تست پروژه توی فایل ReadMe.txt موجوده. فقط یک نکته مهم برای کارکردن این برنامه اینه که mod_rewrite توی Apache باید فعال باشه تا کار کنه. موفق باشید.

----------


## Mohammadxml

سلام آقای شهرکی این خطاها چیه میده؟
mod_rewrite توی Apache رو فعال کردم.

بعد از کلیک رو Login خطای زیرو میده؟
error.rar

----------


## MMSHFE

يك پوشه توي www به اسم pmvc بسازين و فايلها رو داخل اون بگذارين.

----------


## silencer

سلام،من با ساختار mvc یک قسمت کوچیک نوشتم برای نمایش عنوان و مطالب یک جدول،اگه وقت دارید یک نگاه بکنید ببینید با استاندارد جدید مطابقت دارد یا نه

----------


## Mohammadxml

سلام شرمنده آقای شهرکی یه مشکل دیگه اینکه وقتی رو لاگین (عکس error1) کلیک میکنم خطای زیرو میده و توی نوار آدرس اینو ADDR/login اضافه میکنه و کار دیگه ای انجام نمیده؟ http://localhost/pmvc/ADDR/login*
Notice*:  Use of undefined constant ADDR - assumed 'ADDR' in *C:\wamp\www\pmvc\library\view.php* on line *13*
Login

----------


## MMSHFE

دوست عزیز، اگه فایلها به درستی توی پوشه pmvc قرار گرفته باشن، مشکلی پیش نمیاد چون ثابت ADDR توی فایل config.php که توی اون پوشه قرار داره، تعریف شده. دقت کنید که باید حتماً ازطریق آدرس localhost/pmvc وارد سایت بشین تا فایل config در ابتدای فایل index ضمیمه بشه و ثابتهایی که توش تعریف شده، بارگذاری بشن.

----------


## silencer

منتظر پاسخ :لبخند:

----------


## wallfa

عالی بود اقای شهرکی ، ولی امیدوارم روی زبان فارسی مانور بدیم . چون این چیزی که طراحی شده به نظرم به زبان فارسی بر به مشکل می خوره ! 

علاقه مند به همکاری برای ساخت یه مدل ام وی سی در گیت هاب !

----------


## silencer

> سلام،من با ساختار mvc یک قسمت کوچیک نوشتم برای نمایش عنوان و مطالب یک جدول،اگه وقت دارید یک نگاه بکنید ببینید با استاندارد جدید مطابقت دارد یا نه


هنوز منتظر.............؟!!!؟؟؟! :ناراحت:

----------


## MMSHFE

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

----------


## redhat2

سلام ، من یه login ساده نوشتم میتونید بررسی کنید ، ممنون .

----------


## css-man

من مثالهای توی پاور پوینت رو انجام دادم مثال اول که یه رشته رو اکو میکنه ولی با این ارور برخورد کردم مشکل چیه 
هرچی چک میکنم چیزی دستگیرم نمیشه

Notice: Trying to get property of non-object in C:\xampp\htdocs\mvcshahraki\view\view.php on line 15

----------


## css-man

دوستان نمیشه کسی جواب بده؟

----------


## MMSHFE

یه جایی توی تنظیمات مشکل دارین. کدهاتون رو بطور کامل بگذارین یا ایمیل کنید یا اطلاعات TeamViewer رو برام پیام خصوصی کنید تا به سیستمتون وصل بشم ببینم مشکل کجاست.

----------


## redhat2

> سلام ، من یه login ساده نوشتم میتونید بررسی کنید ، ممنون .


 سلام آقای شهرکی میشه یه نگاهی هم به mvc ما بندازین . ممنون . توی پستا ی بالا لینکش هست .

----------


## olampiad

سلام
mvc دقیقا یعنی چی؟
الآن من واسه پروژم کتابخونه درست می کنم و توابع رو از اون فراخوانی می کنم.
به نظرتون دارم ام وی سی تشکیل می دم؟
بدون کتابخونه هم می شه ام وی سی درست کرد
آیا بدوم دونستن oop می شه ام وی سی درست کرد.
ممنون

----------


## olampiad

سلام
کتابی در این مورد سراغ دارید؟

----------


## MMSHFE

فایل ضمیمه رو خوندین؟ MVC اون چیزی که الآن دارین پیاده سازی میکنید نیست. یکبار دیگه به دقت فایل رو بخونید. کتاب هم Pro PHP MVC خوبه.

----------


## abd1mr

به لطف آقای شهرکی و دوستان یه چیزایی از MVC فهمیدم. ولی من شنیدم به تازگی HMVC جای اون را گرفته. میشه لطفا بفرمائین این دیگه چه صیغه ایه؟

----------


## Emir New

سلام 
من موقع اجرا کردن برنامه اقای شهرکی با این متن روبه رو میشم 


*Internal Server Error*

 The server encountered an internal error or misconfiguration and was unable to complete your request.
 Please contact the server administrator at   admin@example.com to inform them of the time this error occurred,  and the actions you performed just before this error.
 More information about this error may be available in the server error log.


باید چکار کنم ؟

----------


## MMSHFE

این خطا مربوط به اسکریپت نیست. از htaccess. استفاده کردین؟

----------


## Emir New

بله 
من خودم از فایل htaccess. خاصی استفاده نکردم از همان فایلی هست که خود شما درون سورس خود قرار دادید 
می خواستم بدونم باید چکار کنم تا این صفحه بره ؟ 
البته به غیر از پاک کردن فایل htaccess.

برای راحتی کار شما من کدها  htaccess رو همین جا می ذارم 

Options +FollowSymLinks
RewriteEngine On
RewriteBase /pmvc
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,NC,QSA]

----------


## abd1mr

کسی جواب ما رو نمیده؟ :ناراحت:

----------


## MMSHFE

اگه اسم پوشه رو چیزی غیر از pmvc گذاشتین، توی خط سوم، همون اسم رو بجای pmvc بگذارین (اسلش باید باشه). اگر هم توی پوشه root سرور کپی کردین، خط سوم رو کلاً حذف کنید.

----------


## Emir New

با تشکر از اقای شهرکی که وقتشون رو گذاشتن 
خدمت شما عرض کنم پوشه رو تغییر نام ندادم  مسیری هم که برنامه رو اجرا می کنم به شکل زیر هست 
http://127.0.0.1:8081/pmvc 
برنامه شما رو من دارم روی لوکال اجرا می کنم 
و از برنامه WAMP هم استفاده می کنم 
ولی همچنان مشکل پا برجا هست

----------


## MMSHFE

خوب وقتی پورت رو دارین تغییر میدین، باید اون رو هم مشخص کنید. این کد htaccess. رو تست کنید:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /pmvc
RewriteCond %{HTTP_PORT} ^8081$
RewriteRule ^(.*)$ /index.php?url=$1 [NC,L]

----------


## Emir New

این کد شما رو عینا کپی کردم و هنوز با این پیغام مواجه هستم 



> *Internal Server Error*
> 
>  The server encountered an internal error or misconfiguration and was unable to complete your request.
>  Please contact the server administrator at   admin@example.com to inform them of the time this error occurred,  and the actions you performed just before this error.
>  More information about this error may be available in the server error log.

----------


## MMSHFE

راستش تا اینجا چیزی که از مشکل شما میشه فهمید اینه که مسئله سر همون تغییر پورت پیشفرض Apache هست. توی اینترنت دنبال htaccess rules with non default apache port on localhost جستجو کنید ببینید چی گیرتون میاد.

----------


## Emir New

مشکل من حل شد 
این هم کد هایی که استفاده کردم

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /pmvc

    RewriteCond %{SERVER_PORT} !^8081$
    RewriteRule .* http://127.0.0.1:8081/index.php?url=$1 [L]
</IfModule>

----------


## MMSHFE

آخ ببخشید شرمنده اصلاً یادم نبود که پورت غیر 80 جزو HTTP محسوب نمیشه و باید از SERVER_PORT استفاده بشه. بهرحال خوشحالم که مشکلتون رفع شد.

----------


## abd1mr

> به لطف آقای شهرکی و دوستان یه چیزایی از MVC فهمیدم. ولی من شنیدم به تازگی HMVC جای اون را گرفته. میشه لطفا بفرمائین این دیگه چه صیغه ایه؟


تو رو خدا اگه چیزی میدونید بگید. :گریه:

----------


## redhat2

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

----------


## lilac8

کتاب http://prefiles.com/ac5e4qedn88v/Apr...C.Nov.2012.rar pro php mvc 


اموزشی از ام وی سی به تاپیک آموزش مرحله به مرحله PHP از پايه با مثال  اضافه شده؟ 
توی  عناوین ندیدم  :افسرده:

----------


## olampiad

سلام
من کد نویسی php متوسط رو تازه تموم کردم.
حالا وارد mvc می شم.
یه سوال داشتم
کار این تابع چیه ؟*
construct__
توابعی که به ابن صورت با __ شروع می شوند چه کاربرد هایی دارند؟
بی نهایت ممنون
*

----------


## olampiad

من این مدل رو از روی توضیحات استاد شهرکی ساختم.
حالا موندم کار تابع *construct__* تو هر کدوم از کلاس ها چیه؟
ممنون



<?php
class model{
public $string;
public function __construct(){
$this->string="php + mvc";    
}
}




class controler{
    public $model;
    function __construct($model){
        $this->model=$model;    
    }
}




class view{
public $controler;
public $model;

    public function __construct($model,$controler){
        $this->model=$model;
        $this->controler=$controler;    
    }
    function output(){
    return '<p>'.$this->model->string.'<p>';    
    }
}


$model=new model();
$controler=new controler($model);
$view=new view($model,$controler);

echo $view->output();
?>

----------


## olampiad

سلام و خسته نباشید به اساتید عزیز
لطفا به این پروِه ساده یه نگا بندازید.
می شه بگید تونستم mvc  رو توش پیاده سازی کنم یا نه.
http://s1.picofile.com/file/8101450268/mvc.zip.html
تشکر فراوان

----------


## H:Shojaei

> سلام
> من کد نویسی php متوسط رو تازه تموم کردم.
> حالا وارد mvc می شم.
> یه سوال داشتم
> کار این تابع چیه ؟*
> construct__
> توابعی که به ابن صورت با __ شروع می شوند چه کاربرد هایی دارند؟
> بی نهایت ممنون
> *


سلام
construct__ ربطي به مدل MVC نداره از مباحث شيگرايي (OOP) هست.
در حقيقت بهش ميگن سازنده ي كلاس يعني تو اين متغيرهاي كلاس مقدار دهي ميشن و يا كارهاي ديگه مثلا تو MVC اضافه كردن لايه هاي مختلف و وقتي شما يه شي جديد از كلاس ميسازيد به صورت خودكار تابع construct__ صدا زده ميشه و هرچي هم توش باشه اجرا ميشه.

----------


## H:Shojaei

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

----------


## olampiad

سلام
می شه چند تا سایت که به روش mvc طراحی شده نام ببرید.
بی نهایت ممنون

----------


## olampiad

چرا کسی جواب نمده؟

----------


## olampiad

سلام
لطفا به این دو پرو‍زه  3 کیلوبایتی یه نگا بندازید.
http://s2.picofile.com/file/8101946118/mvc.rar.html
به نظرتون تو کدومش به طور خوب  mvc رعایت شده.
به کدوم یک از اینا ام وی سی جدید میگن.
بی نهایت ممنون

----------


## mahmod2000

دوتا MVC ها رو دیدم
اصلا جالب نبودن و پایه اصولی رو رعایت نکردن
view فقط برای نمایش هست.. اصل نباید به این صورت با کلاس بندی در خود view  تعریف بشه
فایل mvc1 حالا باز خوبی ای که داشت  نمایش رو توی template انجام میداد.. ولی باید توی view انجام بشه
اصل کار mvc بین controller و model انجام میشه و view یک کلاس نمایش فقط میشه براش تعریف کرد که هر فایل view ای که خواستیم include کنیم و مقدار هاش رو واسش بفرستیم برای نمایش

البته این نظرات در حد دانش من بود
موفق باشید

----------


## olampiad

سلام
تشکر فراوان از دوست عزیز بابت پاسخ
می شه یکی دو تا پروِزه ساده که خودتون به صورت mvc در آوردین یا تو اینترنت سراغ دارید مثال بزنید.
یه پروِزه ساده که با دیتابیس هم یه ارتباط کوچیکی داشته باشه؟ 
بی نهایت ممنون

----------


## mahmod2000

من پیشنهاد میکنم فایل های پست اول تاپیک زیر رو حتما دانلود کنید و ببینید
https://barnamenevis.org/showthread.p...AA%D9%87%D8%A7

----------


## olampiad

چرا کسی سری به این تاپیک نمی زنه؟

----------


## MMSHFE

دوست عزیز، این تاپیک بصورت آموزش هست نه رفع اشکال. توی تاپیکهای اینچنین، معمولاً سؤالات مرتبط با همون مباحث آموزش داده شده مطرح میشه و برای سؤالاتی مثل «اینی که من ساختم، درسته یا نه» یا «کدوم یکی از این دو روش درسته» و... بهتره تاپیک جداگانه ایجاد کنید. تاپیکهای آموزشی صرفاً بصورت ارائه مقاله هستن و سؤالاتی که درمورد تفهیم مباحث همون مقاله مطرح میشن رو در بر میگیرن. مقالات، یک موضوع رو آموزش میدن و اینکه شما چقدر تونستین اون مباحث رو پیاده سازی کنید، بستگی به خودتون داره. با اینحال اگه میخواین دیگران کمکتون کنن، تاپیک جداگانه ایجاد کنید.

----------

