PDA

View Full Version : اموزش استفاده از الگوی طراحی mvc در php همراه با مثال عملی



pesarkhobeee
سه شنبه 27 اسفند 1387, 10:26 صبح
تو این اموزش قصد این رو دارم ، تا با هم سعی کنیم یه خورده از برنامه نویسی معمول ما php کارای مبتدی فاصله بگیرم و برنامه نویسیمونو از حالت درهم برهم یا همون اسپاگتی ((ماکارونی خودمون)) به یه حالت استانداردتر که مدیریت کدهامونو راحت ترو بهتر میکنه برسونیم.
در اخر این اموزش ما علاوه بر این که به صورت عملی با ساخت یک گالری داینامیک بر طبق الگوی mvc اشنا میشیم ، با مفاهیمی مثل فریم ورک ، الگوی طراحی ، وب 1 و 2 و 3 ، PDO و htaccess نیز اشنا میشیم.
شما میتونید فایل PDF اموزش رو از لینک زیر دانلود کنید:
http://blog.pitm.net/downloads/mvc-gallery.pdf
همچنین فایل پروژه رو از لینک زیر میتونید دانلود کنید:
http://blog.pitm.net/downloads/mvc-gallery.zip
خوشحال میشم نظراتتونو راجع به اولین فایل اموزشیم تو وبلاگ http://blog.pitm.net ببینم
موفق باشید

pesarkhobeee
دوشنبه 03 فروردین 1388, 13:25 عصر
از اونجایی که کسی نظر فنی نداد من خودم امروز موقع مطالعه کتاب برنامه نویسی پیشرفته در php5 از انتشارات دیباگران تهران به چند نکته رسیدم!
در واقع چند اشتباه!
من هیچ کدی رو در لایه نمایشم نیاوردم و همه رو در کنترل هام نوشتم که این خودش اشتباه!
بر اسا نکات کتاب:
وارد کردن منطق نمایش در کد برنامه بهتر از وارد کردن منطق برنامه در کد نمایش نیست!
mvc در مورد حذف تمام منطق از نمایش بحث نمیکنه ، بلکه در مورد حذف منطق کار از نمایش صحبت میکند.فرق گذاشتن بین منطق نمایش و کار همیشه ساده نیست.

piroozj
یک شنبه 20 فروردین 1391, 21:32 عصر
سلام و درود خدمت همه من طبق تجربیات ومطالب موجود مقاله ای نوشتم که در ادرس زیر میتوانید دانلودش کنید لطفا نظر بدید
info@gata-co.ir

www.gata-co.ir/index.php?option=com_content&view=article&id=62:mvc-in-php&catid=15:web-design&Itemid=28

soroush.r70
دوشنبه 21 فروردین 1391, 19:40 عصر
تو این اموزش قصد این رو دارم ، تا با هم سعی کنیم یه خورده از برنامه نویسی معمول ما php کارای مبتدی فاصله بگیرم و برنامه نویسیمونو از حالت درهم برهم یا همون اسپاگتی ((ماکارونی خودمون)) به یه حالت استانداردتر که مدیریت کدهامونو راحت ترو بهتر میکنه برسونیم.
در اخر این اموزش ما علاوه بر این که به صورت عملی با ساخت یک گالری داینامیک بر طبق الگوی mvc اشنا میشیم ، با مفاهیمی مثل فریم ورک ، الگوی طراحی ، وب 1 و 2 و 3 ، PDO و htaccess نیز اشنا میشیم.
شما میتونید فایل PDF اموزش رو از لینک زیر دانلود کنید:
http://blog.pitm.net/downloads/mvc-gallery.pdf
همچنین فایل پروژه رو از لینک زیر میتونید دانلود کنید:
http://blog.pitm.net/downloads/mvc-gallery.zip
خوشحال میشم نظراتتونو راجع به اولین فایل اموزشیم تو وبلاگ http://blog.pitm.net ببینم
موفق باشید



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

farhadfery
دوشنبه 21 فروردین 1391, 22:59 عصر
من دیروز بود تو سایت ا apress دیدم یه کتاب برای php MVC زده. خودم که وقت نکردم دانلود کنم و نگاهش کنم. اما اینطور کتابه ا واقعا غنیمت (قنیمت! نمی دونم با کدوم ق هست) است. کاش اسن کتاب را زودتر می زدند:
http://www.apress.com/web-development/php/9781430241645

leilaasadi
جمعه 30 تیر 1391, 16:44 عصر
با سلام
لینک های آموزش mvc خرابه:گریه::ناراحت:

masato
جمعه 30 تیر 1391, 19:59 عصر
سلام
این ساختار یا منطق کلی درسته؟ منظورم الگوی تجزیه آدرس توی روتر و کنترلر که همه چیز توش انجام میشه.
یعنی میشه با استفاده از الگوی که توی این برنامه بکار رفته شروع کرد به طراحی؟یا نه بریم سراغ یه فریمورک؟ میشه سادش رو معرفی کنید؟
میگن CI و کیک برای شروع خوبه حالا از دوستان که با اینها کار کردن کدامش آسانتر ؟
با تشکر

imanitc
شنبه 31 تیر 1391, 11:54 صبح
با سلام
نميتونم فايلها رو دانلود کنم فکر کنم لينک ها مشکل دارن

desatir7316
شنبه 31 تیر 1391, 12:50 عصر
دوست عزیز شروع این آموزش کار خیلی خوبیه ولی جان من اگه قراره مثل خیلی از آموزش های دیگه ای که دوستان شروع می کنن باشه که اوایلش هم خیلی عالی پیش میرن بعد یه دفعه غیبشون میزنه و دیگه نصفه نیمه ولش می کنن اصلا شروعش نکنیم بهتره
از حرفهام ناراحت نشی
اگه تا آخرش هستی تا ماهم این تاپیک رو دنبال کنیم و سعی کنیم توی مباحث شرکت کنیم

با آرزوی موفقیت

Mahmoudzadeh.A
یک شنبه 01 مرداد 1391, 08:42 صبح
سلام! من خودم تجربه و سواد چندانی در این زمینه ندارم ولی به قدر دونسته های خودم مطلب می زارم.
نحوه کار کردن مدل mvc رو می تونید به صورت زیر مشاهده کنید.


90069

این مدل یک مدل سه لایه است .
کلیه درخواست ها از صفحه index.php شروع میشه و یک شی روتر ساخته میشه که وظیفه اش تجزیه آدرس url ها هست .در ادامه بر اساس تجزیه آدرس url که در متغیر سراسری
$_SERVER['REQUEST_URI']
قرار داره کنترلر و action مناسب میشه و بنابراین یک شی از کنترلر مربوطه ایجاد میشه که وظیفه این کنترلر لود ویو مناسب و قرار دادن داده های لازم فراخوانی شده از دیتابیس ویا فایل و.... در این ویو می باشد.بعد از انجام مراحل فوق خروجی نهایی که حاوی فقط کد html هست به مرورگر کاربر ارسال می شود.

حالا فکر کنم کلیات رفتار مدل MVC روشن تر شده است.
------------------------------------------------------------------
چند تا منبع نسبتا عالی رو هم معرفی می کنم.
http://www.nathandavison.com/posts/view/11/custom-php-mvc-tutorial-part-1-introduction
http://johnsquibb.com/tutorials/mvc-framework-in-1-hour-part-one

Mahmoudzadeh.A
یک شنبه 01 مرداد 1391, 08:55 صبح
دوباره سلام!ما در اینجا زیاد کد نویسی محض نمی پردازیم وفقط به مفاهیم و مثال های خوب اکتفا می کنیم.

هر آدرس معمولا و بهتر هست به صورت زیر در نظر گرفته شود


http://localhost/controller/action/param1/param2/...

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


کنترلر:
گفتیم که کنترلر داده های لازم رو از کلاس model استخراج کرده و همچنین ویو مناسب رو بر اساس action که کلاس روتر مشخص کرده انتخاب می کنه این دوتا رو به صورت یک خروجی واحد به مرورگر ارسال می کنه.

حالا معمولا اکثر کلاس های کنترلر چند تا چیز رو با هم مشترک هستند بنابراین برای جلوگیری از دوباره کاری و استفاده مناسب از تفکر شی گرایی یک کلاس پایه به نام BaseController ایجاد می کنیم که صفات مشترک رو داراست و در نهایت بقیه کنترلر ها رو از این کلاس مشتق (ارث بری ) می کنیم که اون صفات رو به ارث ببرن.

البته چون کلاس کنترلر یک طرح کلی است و از اون شی نمی سازیم به صورت abstract تعریف می کنیم.



<?php

abstract class baseControlelr
{
private $model;
private $View;

public function __construct()
{
//code................
}

public function getName()
{
return 'BaseController';
}

}

?>

Mahmoudzadeh.A
یک شنبه 01 مرداد 1391, 09:04 صبح
کلاس کنترلر:




include 'BaseController.php';

class HomeController extends BaseController
{

public function __construct()
{
parent::__construct();
$this->model='hello world';
$this->view=new home_view($this->model);
}

public function index()
{
//code............
}

public function action_1()
{
//code................
}

public function action_2()
{
//code................
}


}


البته در پست های بعدی home_view و کلاس روتر و.... رو توضیح می دم.خدا حافظ.

masato
یک شنبه 01 مرداد 1391, 10:54 صبح
سلام
خیلی ممنون که توجه کردید ؟
من با این کد عمل روتر رو انجام میدم اما نمیدونم چرا کار نمیکنه ؟

<?php
class Router
{
private $registry;
private $path;
private $args=array();
private $file;
private $controller;
private $action;

function __construct($registry)
{
$this->registry=$registry;
}

function setPath($path)
{
if(is_dir($path) == false)
{
throw new Exception('invlide controller path:'.$path.'');
}
$this->path = $path;
}

public function loader()
{
$this->getController();

if(is_readable($this->file) == false)
{
$this->file = $this->path.'/error404.php';
$this->controller = 'error404';
}

include $this->file;
$class=$this->controller.'Controller';

$controller= new $class($this->registry);

if(is_callable(array($controller,$this->action)) == false)//function exists in class
{
$this->action='index';
}
else
{
$action=$this->action;
}
$controller->$action();

}

/*$route=(empty($_GET['rt'])) ? '' : $_GET['rt'];*/
private function getController()
{
echo $_SERVER['REQUEST_URI'];
$base="/meysam_mvc/";
$route=$_SERVER['REQUEST_URI'];
$route=str_replace($base,"",$route);

if(empty($route))
{
$route='index';
}
else
{
$parts=explode('/',$route);
$this->controller = $parts[0];
if(isset($parts[1]))
{
$this->action = $parts[1];
}
}
if(empty($this->controller))
{
$this->controller = 'index';
}
if(empty($this->action))
{
$this->action = 'index';
}
$this->file=$this->path.'/'.$this->controller.'.php';
}
}

?>
با تشکر

Mahmoudzadeh.A
یک شنبه 01 مرداد 1391, 13:04 عصر
مشکلتون چی هست؟ یعنی منظور تون اینه که error می ده ؟ خطاچی هست؟

Mahmoudzadeh.A
یک شنبه 01 مرداد 1391, 13:23 عصر
کلاس BaseView:
برای اینکه تعدای صفات بین کلاس های view مختلف مشترک هست همانند بخش کنترلر ها یک کلاس پایه با نام BaseView در نظر می گیریم



<?php

abstract class BaseView
{
protected $file;
protected $model;

public function __construct()
{
//code............
}
}

?>



کلاس Home.View.php:





<?php

class Home_View extends BaseView
{
/**
*
*
*@The Constructor Function
**/
public function __construct()
{
$this->file='./Home.view.php';
$this->index();
}

// render $this->file
public function index()
{
require $this->file;
}

public function __destruct()
{

}
}



مثال های که زده می شه ساده ولی کاربردی است اگر صبر کنید به مطالب مهمتر و جذاب تر در MVC هم خواهیم رسید.

masato
یک شنبه 01 مرداد 1391, 14:22 عصر
مرسی که پاسخ دادید
آره error میده کنترلر و اکشن رو نمیتونه تشخیص بده ؟قبلا از این استفاده میکردم

$route=(empty($_GET['rt'])) ? '' : $_GET['rt'];
url هام اینجوری بود localhost/meysam_mvc/?rt=blog/view
اما الان از این استفاده میکنم درست جواب نمیده ؟error not found 404

$base="/meysam_mvc/";
$route=$_SERVER['REQUEST_URI'];
$route=str_replace($base,"",$route);
localhost/meysam_mvc/blog/view

Mahmoudzadeh.A
دوشنبه 02 مرداد 1391, 00:03 صبح
سلام!
من که دسترسی به کل پروژه شما ندارم و قضاوت در مورد یک تکه کد سخت هست ولی فکر کنم که:



if(is_readable($this->file) == false)
{
$this->file = $this->path.'/error404.php';
$this->controller = 'error404';
}



یعنی فایل رو پیدا نمی کنه ممکنه مسیر و یا نام فایل رو اشتباه فراخوانی می کنید.
و یا ممکنه مربوط به این تکه کد هم باشه .






$parts=explode('/',$route);
$this->controller = $parts[0];
if(isset($parts[1]))
{
$this->action = $parts[1];
}




یعنی ببنیدکه واقعا $parat[0] داخلش چی هست ؟من فکر می کنم که باید


$this->controller = $parts[1];

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



if(isset($parts[1]))
{
$this->action = $parts[2];
}




فعلا معذرت می خوام رو ظاهر فقط قضاوت کردم.اگه سورس رو قرار بدید بهتر می تونم کمکتون کنم.

masato
دوشنبه 02 مرداد 1391, 12:19 عصر
سلام
آقا دمت گرم درسش کردم
میشه درباره اسمارتی توی ویو صبحت کنید که چطور میشه از اسمارتی توی ویو استفاده کرد.(نمیدونم درست گفتم جمله رو)
بازم تشکر

Mahmoudzadeh.A
دوشنبه 02 مرداد 1391, 14:11 عصر
بهتره از لینک زیر برای اشنایی و نحوه نصب استفاده کنید.
http://articles.tahlildadeh.com/post/d8aed988d8afd8a7d985d988d8b2-Smarty-Template-Engine.aspx

من خودم زیاد کار نکردم و لی سختی چندانی نداره حالا که لینک فوق رو مطالعه کردید می تونید ویوها را مثل فایل test.tpl بسازید و در فولدرtemplate ذخیره کنید بعد در یک فولد دیگر مثل view فایل پی اچ چی اونو قرار بدید و موارد لازم رو تخصیص بدید در نهایت بقیه کار ساده است و فراخوانی هریک از صفحات (ویو) که فایل پی اچ پی هستند مثل همون حالت ساده mvc می باشد....

موفق باشید.

alex_pk
دوشنبه 09 تیر 1393, 13:37 عصر
سلام دوستان
میشه یه منبع که MVC رو بطور کامل آموزش داده باشه معرفی کنید؟
انگلیسی یا فارسی فرقی نمیکنه.

مرسی.

engmmrj
دوشنبه 09 تیر 1393, 14:02 عصر
http://barnamenevis.org/showthread.php?441640-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1%DB%8C-MVC

alex_pk
دوشنبه 09 تیر 1393, 15:17 عصر
من میونم با کتاب یا سایت های آموزشی بهتره تا اموزش های ویدئویی پولی.

MMSHFE
دوشنبه 09 تیر 1393, 16:04 عصر
اگه یه نگاهی به نظرات کاربرانی که اون پکیج رو تهیه کردن (توی لینکی که گذاشتن) بندازین، احتمالاً نظرتون عوض میشه ولی بهرصورت اگه دنبال کتاب یا سایت آموزشی هستین میتونید از کتاب Pro PHP MVC استفاده کنید.

alex_pk
دوشنبه 09 تیر 1393, 16:19 عصر
رو اینکه آموزش هاتون خوب هستن شکی نیستن
منتها روالی که من دارم برای فراگیری یک مبحث ، بیشتر یادگیری از منابع انگلیسی . علی الخصوص آموزش متنیه و نمیتونم با آموزش های مالتی مدیا یا ویدئویی خیلی ارتباط برقرار کنم.
البته صد درصد فاکتور مالی هم دخیله!:بامزه:

sooren_66
سه شنبه 10 تیر 1393, 00:03 صبح
من دیروز بود تو سایت ا apress دیدم یه کتاب برای php MVC زده. خودم که وقت نکردم دانلود کنم و نگاهش کنم. اما اینطور کتابه ا واقعا غنیمت (قنیمت! نمی دونم با کدوم ق هست) است. کاش اسن کتاب را زودتر می زدند:
http://www.apress.com/web-development/php/9781430241645

کتابش پولیه http://books.google.com/intl/en/googlebooks/images/gbs_preview_button1.gif

Print Book Price: $54.99
eBook Price: $38.99

:ناراحت:

sooren_66
سه شنبه 10 تیر 1393, 00:14 صبح
اگه یه نگاهی به نظرات کاربرانی که اون پکیج رو تهیه کردن (توی لینکی که گذاشتن) بندازین، احتمالاً نظرتون عوض میشه ولی بهرصورت اگه دنبال کتاب یا سایت آموزشی هستین میتونید از کتاب Pro PHP MVC استفاده کنید.

لینک دانلود کتاب Pro PHP MVC
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCIQFjAB&url=http%3A%2F%2Fbook.b-e-n.ru%2FPro%2520PHP%2520MVC.pdf&ei=xsSxU86xKcec0AXBpYGICw&usg=AFQjCNF27zwGo1k4IhB3BSiK_eHo75Wb3A&sig2=7Ymw4E63zj_XgjQ5R9ikmQ&bvm=bv.69837884,d.bGQ