-
نقل قول: MVC به زبان ساده
سلام
مهندس شهرکی . یه سوال .
من اگه تو قالب HTML یک قسمتی داشته باشم که به نام
content
بعد تو صفخه اول یک فرم درش باشه .
و بعد از پر کردن فرم . در صفخه دوم همون قسمت مشخصات کاربر نمایش داده شده باشه
سوالم اینجاست که
این فرم باید تو مدل قرارداشته باشه یا تو ویوو
-
نقل قول: MVC به زبان ساده
توی View باید بگذارین چون بهرحال مربوط به نمایش اطلاعات میشه و مدل فقط وظیفه استخراج اطلاعات از منابع ذخیره سازی مثل فایل و دیتابیس و سایر سایتها و... رو برعهده داره.
-
نقل قول: MVC به زبان ساده
خب من تو مثال شما فرمم رو اینجوری اضافه کردم . توی فایل
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 قرار میدید؟
-
نقل قول: MVC به زبان ساده
ممنون آقای شهرکی واقعا عالی بود.
با اجازه آقای شهرکی
تو این لینک بصورت خیلی ساده در حد مبتدی مطلبی وجود داره.
-
نقل قول: MVC به زبان ساده
نقل قول:
نوشته شده توسط
Variable
خب من تو مثال شما فرمم رو اینجوری اضافه کردم ...
ببینید، عنصر فرم باید توی کلاس view باشه نه توی کلاس مدل. بعد توی main.view باید بنویسید ;(t->Assign('form', $this->form$
مدل فقط وظیفه استخراج اطلاعات از پایگاه داده ها و یا ذخیره کردن نتایج کارها توی اون رو برعهده داره و اصلاً هیچ چیزی بجز این نباید داخلش باشه (چه فرم، چه هرگونه کد دیگه). تمام اینها وظیفه View هست. کنترلر هم که کارش مشخصه: دریافت ورودیهای کاربر و دستور دادن به مدل برای استخراج داده های مناسب از پایگاه داده ها تا بعداً View از اونها استفاده کنه.
-
نقل قول: MVC به زبان ساده
سلام
شما به این میگید اسلاید ؟ به نظر من که این اصلا شبیه یه اسلاید نیست و بیشتر یه جزوه هستش، البته قصد بدی ندارم ولی تا اونجایی که میدونم توی اسلاید نباید ما بیام کل داستان و از ب بسم الله بگیم البته این ایراد من به طراحی هستش نه به محتوا.
-
نقل قول: MVC به زبان ساده
دوست عزیز، اگه پست اول رو کامل و با دقت میخوندین، متوجه میشدین که این اسلاید چرا اینطوری شده. قرار بود اول اسلاید باشه و تیتر مطالب داخلش باشه و بعد، توی کارگاه آموزشی درباره اسلایدها توضیح داده بشه ولی بعداً چون موضوع MVC توسط اکثریت اعضا انتخاب نشد، توضیحات رو هم بهش اضافه کردم تا بصورت خودآموز در بیاد. حالا مشکل فقط فرمته؟ PDF بگذارم خوبه؟ بهتره بجای ساختار و ظاهر، درمورد محتوا بحث و تبادل نظر کنیم. اینطور نیست؟
-
1 ضمیمه
نقل قول: MVC به زبان ساده
استاد شما گفتتین بین لایه 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
ضمیمه 107050
-
نقل قول: MVC به زبان ساده
ولی این ارتباط جدیدی که شما میگی به نظرم بهتره .
این ارتباط که شما گفتی چه برتری هایی نسبت با اون ارتباط ها داره ؟
-
نقل قول: MVC به زبان ساده
نه من منظورم دهه 1970 بود. شاید اشتباهاً گفتم سال 1970 اما درهرحال، نسخه انگلیسی ویکیپدیا بروزتره و کتاب Apress هم خیلی جدید نیست و توی حوزه IT تغییرات حتی ممکنه روزانه اتفاق بیفته. بهرحال این ایده اصلی که بخشهای مختلف پروژه از هم جدا باشن، منطق اصلی MVC هست و فکر میکنم راهکار جدید MVC بهتر این هدف رو پیاده سازی میکنه و اگه به این شکل عمل نکنیم، Controllerهای خیلی حجیم و در عوض، Model و View خیلی کوچک خواهیم داشت و عملاً توزیع مناسبی ازنظر بار کاری روی بخشهای مختلف نداریم. اما توی معماری جدید، View که مسئولیت نمایش داده ها رو برعهده داره، بطور طبیعی بزرگتر و پررنگتر از بقیه بخشها خواهد شد و در عین حال، بخشهای مختلف بطور تقریباً متعادل و مساوی در انجام اهداف پروژه دخیل خواهند بود.
-
نقل قول: MVC به زبان ساده
اگر بخواهیم یک لایه اضافه کنیم ارتباط لایه ها به چه صورت میشود . میشه یک مثال بزنید.
-
نقل قول: MVC به زبان ساده
نقل قول:
نوشته شده توسط
MMSHFE
البته یادگیری شئ گرایی کمک خیلی زیادی توی اجرای بهتر MVC میکنه ولی لزوماً ضرورتی نداره حتماً از شئ گرایی استفاده بشه و MVC رو بصورت Procedural هم میشه مورد استفاده قرار داد. اصولاً قدمت MVC بیشتر از OOP هست.
سلام مهندس شهرکی.روش استفاده از MVC بصورت Procedural چطوریه؟
اگه امکانش هست مثال لاگینی که توی این لینک با استفاده از کلاس گفته رو بصورت Procedural توضیح بدین؟
-
نقل قول: MVC به زبان ساده
منظور پروسیجر نویسی سمت دیتابیس رو میگید؟
-
نقل قول: MVC به زبان ساده
منظورم اینه که در برنامه اصلا از شی گرایی(OOP) استفاده نکنم.
یعنی به صورت کلاسیک برنامه بنویسم.نه اینکه نمیخوام شی گرایی کارنکنم بعدا حتما کار می کنم.
-
نقل قول: MVC به زبان ساده
دوستان mvc قدیم را میتوان در فریم ورکهای کیک مشاهده نمود.روش جدید را هم در فریم ورک ای
به نظر بنده mvc خیلی عالیه اما mvc که دست کاربر را محدود نکنه.به نظر بنده در ci بحث mvc خیلی خوب و انعطاف پدیر پیاده شده.
به نظر بنده ساختار برنامه نویسی خوبه که ثابت نباشه چون دیگه میشه یک ابزار نه برنامه نویسی
-
نقل قول: MVC به زبان ساده
نقل قول:
نوشته شده توسط
Mohammadxml
سلام مهندس شهرکی.روش استفاده از MVC بصورت Procedural چطوریه؟
اگه امکانش هست مثال لاگینی که توی
این لینک با استفاده از کلاس گفته رو بصورت Procedural توضیح بدین؟
توی مثال اون لینک که گذاشتین که یک مشکل عمده وجود داره که توی کامنتهای همون سایت هم اشاره کردم (نوشتن کوئری توی کنترلر و ارسال به مدل برای اجرا). اما درهرحال، مثال فوق رو بدون شئ گرایی (اما به روش صحیح) بازنویسی کردم تا ببینید چطور میشه:
1- View
کد HTML:
<?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
کد HTML:
<?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
کد HTML:
<?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 به راحتی قابل رفع خواهد بود.
-
نقل قول: MVC به زبان ساده
جناب شهرکی من توی MVC برای هر جدول از دیتابیس یک مدل و یک کنترل به اسم همون جدول دارم.
وقتی اینارو اینکلود میکنم به مشکل بر میخورم.به همین دلیل مجبورم اسم یکی از کلاس هارو تغییر بدم.
امکانش هست که این مشکل برطرف بشه ؟ یعنی ما بتونیم 2 تا کلاس همنام داشته باشیم و موفعه اینکلود به مشکل بر نخوریم ؟!
-
نقل قول: MVC به زبان ساده
نقل قول:
نوشته شده توسط
Veteran
جناب شهرکی من توی MVC برای هر جدول از دیتابیس یک مدل و یک کنترل به اسم همون جدول دارم.
وقتی اینارو اینکلود میکنم به مشکل بر میخورم.به همین دلیل مجبورم اسم یکی از کلاس هارو تغییر بدم.
امکانش هست که این مشکل برطرف بشه ؟ یعنی ما بتونیم 2 تا کلاس همنام داشته باشیم و موفعه اینکلود به مشکل بر نخوریم ؟!
نميشه دوتا كلاس هم نام داشت!
-
نقل قول: MVC به زبان ساده
با namespace میشه ولی راه درستی نیست. بهتره اسامی واضح و بدون ابهام بگذارین. مثلاً users_model و...
-
نقل قول: MVC به زبان ساده
سلام جناب شهرکی
خسته نباشید
بابت این تاپیک پر ارزش ازتون متشکرم
بنده قبلا در دوران دانشجویی پروژه پایانی ام رو بر اساس معماری سه لایه(mvc) پیاده سازی کردم ولی وقتی این تاپیک رو مطالعه کردم فهمیدم که اشتباهاتی در کارم بوده و خودم خبر نداشتم و از این بابت ازتون متشکرم
سوال برام پیش اومده،میخوام بدونم رابطه معماری سه لایه با برقراری امنیت از دید شما چطوری هست؟آیا تاثیر گذاره یا نه باید از تکنیک های دیگر استفاده کرد برای برقراری امنیت؟منظورم اینه که معماری سه لایه چقدر به امنیت وب سایت کمک میکنه؟
با تشکر
-
نقل قول: MVC به زبان ساده
بطور مستقیم MVC و کلاً معماری چندلایه تأثیری روی امنیت نداره. منظورم اینه که به خودی خود باعث ایجاد امنیت نمیشه اما از این جهت که به شما کمک میکنه منطق برنامه رو از استخراج اطلاعات و نمایشش جدا کنید، باعث میشه که فکرتون توی کد آزادتر باشه و مباحث امنیتی رو بهتر زیرنظر داشته باشین. مثلاً توی Model تمام کارهای لازم برای امن کردن ورودیهایی که قراره توی کوئری بکار برن و توی دیتابیس ذخیره بشه و... درنظر بگیرین و توی View تمام کارهایی که برای Escapeکردن خروجی که قراره برای کلاینت ارسال بشه انجام بدین تا درمقابل حملاتی مثل JS Injection و... ایمن باشید. تمام این کارها رو هم درحالی میتونید انجام بدین که Controller که منطق پردازش ورودیهای کاربر و انتخاب عملیات مناسب براساس اونها رو داره، دیگه درگیر مباحث امنیتی مثل SQL Injection و امثالهم نمیشه.
-
نقل قول: MVC به زبان ساده
سلام آقای شهرکی.ببخشید من اگه بخوام مثال لاگینی که در بالا زحمت کشیدین توضیح دادین رو اجرا کنم یعنی توی پوشه ی www کپی کنم چه فایلهایی رو باید کپی کنم و بعد صفحه ی index.php چی میشه و اینکه اگه بخوام پروژه خودمو با مدل mvc بدون شی گرایی بنویسم جهت توسعه پروژه تمام کدهای من باید داخل این سه فایل ذخیره بشه؟(منظورم اینه ساختارشو بلد نیستم).
مثلا باید کل کدهای طراحی (css ,javascript,jquery) باید توی قسمت view وارد بشه؟و...
-
نقل قول: MVC به زبان ساده
باید یک فایل 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 حاکمه و باید رعایت کنید.
-
نقل قول: MVC به زبان ساده
نقل قول:
نوشته شده توسط
MMSHFE
باید یک فایل index بسازین با یک مدل، ویو و کنترلر اصلی که index این فایلها رو فراخوانی میکنه و کنترلر اصلی، برحسب پارامترهای ورودی کاربر، مدل، ویو و کنترلرهای دیگه رو صدا میزنه (مثلاً login).
ببخشید این تیکه رو متوجه نشدم.
اگه لطف کنید محتویات فایل index.php رو برام بذارین و یا مثال عملی لاگینی که برام نوشتین (به طور کامل) رو برای دانلود بذارین ممنون میشم.
-
نقل قول: MVC به زبان ساده
استاد جواب ما رو نداد ی؟
اگه بخوایم به صورت اختیاری یک لایه یا چند لایه اضافه کنیم باید ارتباط لایه ها رو چه جوری ارتباط بدیم ؟
-
نقل قول: MVC به زبان ساده
گفتم که، بستگی به طراحی خودتون داره. اینکه لایه اضافه شده برای چه کاری درنظر گرفته شده. مثلاً اگه لایه جدید، وظیفه کار با موتور قالب رو داره، باید بعد از View قرار بگیره یا اگه وظیفه خنثی کردن کدهای مخرب جهت نمایش صحیح توی خروجی رو داره، باید بین Model و View باشه. اما قبل از تمام اینها، باید دید آیا واقعاً اون لایه اضافه لازمه یا میشه توی همین لایه ها قرارش داد؟
-
نقل قول: MVC به زبان ساده
سلام. با توجه به اینکه ارتباطی بین Controller و View وجود نداره توی یک سیستم Login ساده کاربر اطلاعات رو وارد می کنه و Controller بر حسب اطلاعات کار های مربوط به ورود مثل بررسی صحیح بودن و مقدار دهی Session رو انجام میده که حالا دو حالت وجود داره یا ورود موفقه یا ناموفق خب با توجه به چیزی که قبلا گفتم که ارتباطی بین Controller و View نیست لایه ی View باید چه جوری تشخیص بده که ورود موفق بوده یا ناموفق که اطلاعات صحیحو نمایش بده!
آیا Controller باید موفق یا ناموفق بودن رو توی Model ذخیره کنه و View با توجه به چیزی که توی Model هست اطلاعاتو نمایش بده؟!اگه اینجوری بشه ما توی لایه View باید if else داشته باشیم؟
-
نقل قول: MVC به زبان ساده
ببینید، مسئله دقیقاً همینه که در معماری جدید MVC هیچ اشکالی نداره که View دارای دستورات شرطی و... باشه. اما به شرطی که همونطور که خودتون اشاره کردین، این شرطها صرفاً بررسی یکسری پارامتر باشه که کنترلر تنظیم میکنه و براساس اونها، خروجی View عوض میشه. البته دقت کنید که Controller لزوماً نباید داده های Model رو برای مثال لاگین تغییر بده بلکه خودش میتونه سشن بسازه و توی View وجود/عدم وجود سشن بررسی بشه. این مسئله با ارسال اطلاعات از Controller به View فرق میکنه چون سشن سراسریه و همه بهش دسترسی دارن. یه چیزی مثل متغیرهای سراسری.
-
نقل قول: MVC به زبان ساده
با سلام و تشکر بسیار از زحمات شما یه سوال داشتم:
اینکه یک سری فانکشن ها مثل multihash قرار در چند صفحه مورد استفاده قرار بگیرن جای این فانکشن ها کجاست؟
یعنی کجا قرار ذخیره بشن؟
ممنونم.
-
نقل قول: MVC به زبان ساده
اینها معمولاً توی یک پوشه جداگانه و تحت عنوان Library قرار میگیرن. بطور کلی به اینها نمیشه گفت یک لایه جداگانه هستن چون توی تمام لایه ها مورد استفاده قرار خواهند گرفت.
-
1 ضمیمه
نقل قول: MVC به زبان ساده
سلام آقای شهرکی.ببخشید جواب پست بالا رو که زدم ندادین.
لطف کنید و نگاهی به این فایل بندازید هیچ کدنویسی انجام ندادم و میخوام بدونم ساختاری که در mvc باید داخل پوشه ی www درست کنم اینطوریه؟
-
نقل قول: MVC به زبان ساده
دوست عزیز، ساختار رو که گفتم دست خودتونه. مهم نحوه کدنویسیه.
-
نقل قول: MVC به زبان ساده
سلام ببخشید آقای شهرکی لطف کنید کمی در مورد نحوه کدنویسی(کدنویسی mvc بدون شی گرایی(Procedural ) و با شی گرایی) توضیح بدین و یا سایت هایی جهت آموزش معرفی کنید.
اگه لطف کنید یه مثال عملی (کد نویسی بدون شی گرایی) بذارین ممنون میشم.
-
نقل قول: MVC به زبان ساده
سلام دوستان
این آموزش هم عالیه: لینک دانلود
من خودم تا قبل این اصلا نمی تونستم mvc کار کنم، فقط زبان اصلیه حواستون باشه
ببخشید اگه جای بدی پست می دم، من خودم می خواستم این آموزش رو آپلود کنم ولی اینجا پیداش کردم
-
نقل قول: MVC به زبان ساده
دوست عزیز، این شکل مربوط به معماری قدیمه. معماری جدید همونطور که توی اسلایدها اشاره شده، کلاً شکل کار رو تغییر داده. هرچند این شکل هم به نظرم اشتباه باشه چون Model فقط از کنترلر دستور میگیره (در هر دو معماری قدیم و جدید) و تفاوت معماری قدیم و جدید در اینه که در قدیم، Controller داده ها رو از Model میگرفت و تحویل View میداد ولی در معماری جدید، View خودش این اطلاعات رو دریافت میکنه و کنترلر این وسط نقشی نداره.
-
نقل قول: MVC به زبان ساده
توی اون نمونه برنامه ای که شما نوشته بودید لایه ی View یک نمونه از شئ Controller رو در اختیار داشت. می خواستم ببینم چه نیازیه که View به Controller دسترسی داشته باشه؟
-
نقل قول: MVC به زبان ساده
قبلاً بهش اشاره کردم. بخاطر اینکه درصورت نیاز به تغییر داده های Model، از کنترلر بخواد دستورات لازم رو به Model بده.
-
نقل قول: MVC به زبان ساده
سلام دوستان یه نگاهی هم به این لینک ها بندازین ببین کدومش برای ساختار 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) از شما درخواست کردم رو نمی تونید بذارید لطف کنید سایت آموزشی معرفی کنید چون من هر چی گشتم با کلاس برنامشو نوشته بودن.شرمنده من نتونستم بنویسمش.
-
نقل قول: MVC به زبان ساده
دوست عزیز، من که کدهای لازم رو براتون نوشتم. اگه فقط index مونده، بفرمایید تا اون رو هم بنویسم ولی کار خاصی نیست و خودتون هم میتونید بنویسید.
-
نقل قول: MVC به زبان ساده
جناب شهرکی میشه یک نمونه که در اون دیتابیس هم به کار رفته باشه بنویسین ؟
طوری که من فهمیدم برای هر جدول از دیتابیس یک مدل داریم که در این مدل کارهای مربوط به اون جدول مثل اضافه کردن ویرایش و.... انجام میشه
درسته ؟