PDA

View Full Version : شروع برنامه نویسی mvc بدون استفاده از فریم ورک



IMANAZADI
پنج شنبه 29 بهمن 1394, 04:10 صبح
با سلام
دوستان مدتی مشغول یک پروژه به سبک mvc هستم البته هنوز اوایل کار هستم
اولین پروژه mvc هست
حالا یک سری ابهامات واسم بوجود اومده میخوام از شما عزیزان یاری بگیرم


پروژه طورتی هست که اکثر تکنولوژی ها در اون گنجانده شده (ajax , ....)


اینم خدمتتون عرض کنم که جهت متوجه شدن طرز کار ، میخوام بدون هیچگونه فریم ورکی برنامه رو انجام بدم یعنی فقط با dreamweaver , xampp


الان کلاس روتر router رو نوشتم که یه url میگیره و اونو به آرایه تبدیل و سپس به ترتیب در قسمت های مختلف کلاس استفاده میکنه


www.sitename.com/controller/action/param1/param2 (http://www.sitename.com/index/action/param1/param2)


مثال بالا به این صورت آنالیز میشه که آیتم اول نام فایل کنترلرمون هست ، آیتم دوم نام تابع در فایل ، و آیتم های بعدی پارامترها می باشند


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


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




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

Farshid007
پنج شنبه 29 بهمن 1394, 04:18 صبح
موقعی که ما سایت رو آپلود میکنم فایل index.php بعنوان صفحه اصلی لود میشه ، اگر بخواهیم صفحه های دیگر رو در همون صفحه ابتدایی اجرا کنیم باید به چه طریقی عمل کنیم ؟؟؟


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

IMANAZADI
پنج شنبه 29 بهمن 1394, 07:18 صبح
فرض کنید یک صفحه بنام pagetwo.php داریم

در صفحه آغازین ، یک لینک (تگ a) داریم که میخواهیم وقتی توسط کاربر کلیک شد صفحه مربوطه لود بشه

حالا href لینک رو چی باید بنویسیم ؟؟

یعنی باید href رو پاس بدیم به کلاس روتر یا روش دیگه ای هست ؟؟؟؟؟

mohamadali1374
پنج شنبه 29 بهمن 1394, 11:07 صبح
سلام
ببینید شما در برنامه نویسی سه لایه خوب یه Controller دارید..
وقتی که شما دارید کد روتر رو مینویسید باید در کدتون ؛ url رو تفسیر کنید به این شکل که :

www.sitename.com/index/action/param1/param2
بگید وقتی آدرس سایت زده شد اولین رشته بعد از اسلش نام کنترلر هست و بعد از اسلش دوم نام action قرار داره ... که مطمئنا این کار رو کردید.
اما وقتی که میخواهید یه مثلا یه تگ a بنویسید که مثلا با کلیک روی اون لیست کاربران سایت رو نشون بده خوب شما اول باید در کنترلر یه اکشن درست کنید که کار اتصال به مدل و بازیابی لیست کاربران رو انجام بنده و بعد در همون اکشن اطلاعات رو به یک ویو ارسال کنید که نمایش داده بشن. پس شما در href تگ a باید آدرس کنترلر و اکشن ورد نظر رو ارسال کنید.
مثلا اگه اسم کنترلر ما admin باشه و اسم اکشن ما userlist باشه شما باید در href تگ a بنویسید:

www.sitename.com/admin/userlist

اما در نوشتن مسیر یاب دقت کنید چون یادمه چند سال قبل که یه پروژه mvc نوشتم در اواسط پروژه متوجه شدم که برای مثلا ajax نمیتونم آدرس دهی کنم. قبل از شروع پروژه تمام آدرس دهی ها رو چک کنید

IMANAZADI
جمعه 30 بهمن 1394, 03:54 صبح
سلام
ببینید شما در برنامه نویسی سه لایه خوب یه Controller دارید..
وقتی که شما دارید کد روتر رو مینویسید باید در کدتون ؛ url رو تفسیر کنید به این شکل که :



1

www.sitename.com/index/action/param1/param2







بگید وقتی آدرس سایت زده شد اولین رشته بعد از اسلش نام کنترلر هست و بعد از اسلش دوم نام action قرار داره ... که مطمئنا این کار رو کردید.



دوست گرامی تا اینجا این کارها رو انجام دادم


ولی مشکل من اینه چطوری آدرس صفحه هات رو به روتر پاس بدم

مثلا فرض کنید همچین آدرسی در صفحه ایندکس داریم که صفحه لیست رو بارگذاری میکند ، میخواهیم با کلیک کاربر ، این آدرس به کلاس روتر پاس داده بشه ، چطوری باید این کار رو انجام بدیم ؟؟



<a href="/listController/action/param1/param2"> List</a>







اما در نوشتن مسیر یاب دقت کنید چون یادمه چند سال قبل که یه پروژه mvc نوشتم در اواسط پروژه متوجه شدم که برای مثلا ajax نمیتونم آدرس دهی کنم. قبل از شروع پروژه تمام آدرس دهی ها رو چک کنید



یکی از سوال های بعدیم هم در مورد آژاکس بود در mvc چطوری باید با آژاکس کار کرد

hamedarian2009
جمعه 30 بهمن 1394, 05:03 صبح
خب چرا از روی یک آموزشی چیزی جلو نمیرید؟
شما وقتی router رو نوشتید کافیه پارامترهایی که توسط url به صفحه Index.php هدایت میشه (با htaccess) دریافت کنی و به صورت آرایه دربیاری اونوقت متوجه میشی کدوم کنترلر و کدوم اکشن باید فراخوانی بشه

برای ajax هم شما آدرس فایلی که قراره کد php داخلش نوشته میشه رو به جای یک فایل به یک کنترلر و اکشن میدین خب اونجا عملیات php رو انجام میدی و پاسخ مناسب رو هم تولید میکنید در ضمن تو mvc آدرس ها رو به صورت مطلق بدین نه نسبی

mohamadali1374
جمعه 30 بهمن 1394, 05:53 صبح
سلام
شما یه تجزیه کننده url نیاز دارید یه نمونه در زیر براتون قرار دادم با این کد شما نام کنترلر و نام اکشن و پارامتر ها درسترسی دارید:

$root="testmvc";

$uri=$_SERVER['REQUEST_URI'];
$uri=str_replace("/".$root."/","",$uri);
$mypath="";
$path="";
$count=0;
$Controller="";
$uri=explode("/",$uri);
foreach($uri as $Key => $Value){
if($Value==""){
unset($uri[$count]);
}
$count++;
}
foreach($uri as $Key => $Value){
$mypath[]=$Value;

}

print_r($mypath);


در متغیر root نام پوشه ای که کد های شما در اون قرار دارن آورده میشه خروجی این کد به شکل زیر هست:

Array ( [0] => testmvc [1] => list [2] => action [3] => param1 [4] => param2 )

برای اولین بار هم کافی در صفحه index این صفحه رو لود کنید:

<?php
include("path.php");
?>


خوب حالا شما نام کنترلر رو دارید با کد زیر میتونید تشخیص بدید که چنین کنترلری وجود داره یانه ؟

if(isset($mypath[0])){
$path="Controller/".$mypath[0]."Controller.php";
if(file_exists($path)){
$Controller=$mypath[0]."Controller";
$controller=new $Controller();
}else{
echo "Not Exist controller";
exit();

}
}else{
$Controller=$option["mainController"];
$controller=new $Controller();
}
else آخر هم میگه اگه نام کنترلر ارسال نشد (مثل زمانی که کاربر فقط نام سایت رو وارد میکنه) کنترلر main رو در نظر بگیر. در if اول میگم اگر چنین کنترلری وجود داشت یه شی جدید از کلاس کنترلر زیر ایجاد کن:
کلاس کنترلر:

<?php
class controller{
public $View;
public function __construct(){
$this->View= new View();
}

}


?>

و حالا یه کنترلر هم به نام list ایجاد میکنیم که یه اکشن index داره:

<?php
class listController extends controller {

public function indexAction(){
echo "تست mvc";
}//indexAction
}

?>

IMANAZADI
شنبه 01 اسفند 1394, 02:25 صبح
دوست عزیز ممنونم

ولی من این ها رو میدونم و انجام دادم

میخواستم ببینم چطوری باید همه درخواست ها رو به index ارسال کنم

زیاد سرچ زدم ولی چیز درستی دستگیرم نشد

ولی اینو فهمیدم باید از فایل .htaccess استفاده کنم

حالا چطوری باید این فایل رو دستکاری و ایجاد کنم که همه درخواست ها به ایندکس ارسال شود و رو نمیدونم ممنون میشم راهنمایی کنید

hamedarian2009
شنبه 01 اسفند 1394, 05:27 صبح
شما از روی یه آموزش یا کتاب جلو برید دیگه این سوالات براتون پیش نمیاد یه فایل Htaccess ایجاد کن و کدهای زیر رو داخلش قرار بده


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

تو فایل index.php میتونی به متغیر url به صورت get دسترسی داشته باشی


echo $_GET['url'];

IMANAZADI
شنبه 01 اسفند 1394, 10:59 صبح
دوست عزیز کتاب خوب چی معرفی میکنید

hamedarian2009
شنبه 01 اسفند 1394, 11:13 صبح
دوست عزیز کتاب خوب چی معرفی میکنید

http://it-ebooks.info/book/2327/

cl_nyc999
چهارشنبه 08 اردیبهشت 1395, 23:36 عصر
شما از روی یه آموزش یا کتاب جلو برید دیگه این سوالات براتون پیش نمیاد یه فایل Htaccess ایجاد کن و کدهای زیر رو داخلش قرار بده


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

تو فایل index.php میتونی به متغیر url به صورت get دسترسی داشته باشی


echo $_GET['url'];


من وقتی متغیر url را در ایندکس درخواست میکنم این ارور رو میده:

Undefined index: url in C:\wamp\www\mvc

بنظرتون چرا این ارور رو میده؟
میگه url دیفاین نشده

Farshid007
پنج شنبه 09 اردیبهشت 1395, 07:29 صبح
من وقتی متغیر url را در ایندکس درخواست میکنم این ارور رو میده:

Undefined index: url in C:\wamp\www\mvc

بنظرتون چرا این ارور رو میده؟
میگه url دیفاین نشده
کد هارو تو فایل htaccess. رو نوشتید؟؟
ی ساختار دیگه رو امتحان کنید
مثلا:


Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^search/(.*)$ ./search.php?query=$1


این میگه که
search/farshid
رو هدایت کن به:
search.php?query=$1
ی خورده با این آدرس هاش ور برید متوجه کلیت موضوع میشید
احتمالا مشکل از ادرسی هست که دادید

cl_nyc999
شنبه 11 اردیبهشت 1395, 02:38 صبح
کد هارو تو فایل htaccess. رو نوشتید؟؟
ی ساختار دیگه رو امتحان کنید
مثلا:


Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^search/(.*)$ ./search.php?query=$1


این میگه که
search/farshid
رو هدایت کن به:
search.php?query=$1
ی خورده با این آدرس هاش ور برید متوجه کلیت موضوع میشید
احتمالا مشکل از ادرسی هست که دادید

سلام
اره نوشتم
ببین. یک ویدیوی آموزشی است که درست در سی دی اول همین مثال رو زده. و من گیر افتادم نمیتونم برم جلو
اینجا ارور رو گذاشتم
و درست سورسش رو هم گذاشتم
طرف تو ویدیو انجام میده ها. این نشون میده که تو کد مشکلی نیست. فکر کنم مشکل یک جایی تو سرور wamp من است
لطفا همون سورسی که گذاشتم شما هم اگر wamp دارید باز کنید و بعد این ادرس رو بزنید ببینید باز میشه؟
http://localhost/mvc

اینم ادرس:
http://barnamenevis.org/showthread.php?406782-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1%DB%8C-MVC-%D8%A7%D8%B2-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%AA%D8%A7-%D8%A7%D9%86%D8%AA%D9%87%D8%A7&p=2317613&viewfull=1#post2317613
(http://barnamenevis.org/showthread.php?406782-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1%DB%8C-MVC-%D8%A7%D8%B2-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%AA%D8%A7-%D8%A7%D9%86%D8%AA%D9%87%D8%A7&p=2317613&viewfull=1#post2317613)

cl_nyc999
سه شنبه 14 اردیبهشت 1395, 05:22 صبح
دوست عزیز کجایی؟ منتظر کمک شما هستم :چشمک: