چگونگی گرفتن method در php mvc
سلام دوستان
من با استفاده از آموزش زیر شروع به یادگیری php mvc کردم:
http://web.itpro.ir/tutorials/12499/...8%AF%D8%B1-php
همه چیز خوب هست. مشکل فقط اینجاست که من میخواهم به function های داخلی صفحه که در فولدر model هست دسترسی داشته باشم.
به طور مثال من در صفحه index هستم (در فولدر view/index/index.php)؛ حالا به ازای هر صفحه در فولدر model یک فایل با نام آن و model.php_ دارم که داخل آن یکسری function هست. تو آموزش یک object از این class ساخته شده. اما در لایه view نمیتونم بهش وصل بشم. چه باید بکنم؟
نقل قول: چگونگی گرفتن method در php mvc
درود
کار همه اینها با کنترلر هست.شما باید دو تا متد در کنترلر اصلی (mvc)برای کارهاتون بسازید.1-render2-loadmodel
1-loadmodel:کارش فراخوانی مدل در کنترلر هست
2-render:فرخوانی لایه نمایش (view) در کنترلر
و کنترلر شما از کنترلر اصلی مشتق میشه(extends) که تو کنترلرتون میتونید از اون دو تا متد استفاده کنید
این لینک رو ببینیدhttp://phpro.ir/mvc-%D8%AF%D8%B1-php...8%D9%85-model/
تو اینجا تابع model همون کاری که میخواید رو میکنه.
این لینک هم برای view
http://phpro.ir/mvc-%D8%AF%D8%B1-php...88-controller/
آموزش های همون لینک رو گام به گام بخونید تا متوجه بشید
http://phpro.ir/page/2/
نقل قول: چگونگی گرفتن method در php mvc
میشه یک مثال بزنید. یعنی چطور تو لایه view بتونم استفاده کنم؟
نقل قول: چگونگی گرفتن method در php mvc
اگه منظورتون مدل هست اینجوری
//controller method
public function index() {
$data=array(
'getindex'=>$this->model->getindex()
);
$this->view->render('admin/index',$data,TRUE);
}
تو ویو getindex رو میشه به صورت متغییر بهش دسترسی داشت.اگه متوجه نشدید بگید توضیح بدم
نقل قول: چگونگی گرفتن method در php mvc
سلام
ممنون از شما
تقریباً متوجه شدم !!!
اما چندتا مطلب:
1- آموزشی که شما گذاشته بودید رو خوندم؛ اما وقتی با لینک آموزشی که خودم گذاشته بودم مقایسه کردم جسارتاً دیدم لینک آموزشی که من گذاشتم اصولی تر هست. البته اون آموزشی که شما گذاشته بودید رو قبلا دیده بودم اما نخونده بودم. تو آموزشی که من لینک گذاشتم همه چیز توسط controller بررسی و به view , model فرستاده میشد. اما تو آموزشی که شما گذاشته بودید تو لایه کلاس view می امد query اجرا میکرد که خودتون بهتر میدونید این query میبایست در model مربوط به صفحه انجام میشد. به هر حال ...
2- من الان تو متد render کلاس view جایی برای متغیر $data در نظر نگرفتم. اما شما اینجا به عنوان پارامتر در متد ازش استفاده کردید. میشه یه توضیح بدید که با تو کد view تغییری ایجاد کنم یا خیر؟
3- ببیند وقتی تو لایه view من print_r($this) رو میگیرم چنین متنی چاپ میشه:
View Object
(
)
که کاملا صحیح هست. چون در حال حاضر داخل آبجکت view هستیم. اما وقتی تو فایل bootstrap.php که loadeer فریم ورک من هست بعد از لود مدل مربوط به صفحه از متغیر $controller پرینت میگیرم به صورت زیر چاپ میشه:
Index Object
(
[view] = View Object
(
)
[model] = Index_model
)
یعنی اینکه تو آبجکت Index من مدل هست. اما تو view نمیدونم چطور میتونم بهش دسترسی داشته باشم.
این ها رو با توجه به کدهای آموزش خودم گفتم. ممنون میشم راهنمایی کنید.
نقل قول: چگونگی گرفتن method در php mvc
راستشو بخواید من اون لینکی که دادم رو دقیق نخوندم و برای اینکه مشکلتون بر طرف بشه اون لینکو دادم.اگه به کلاس ویو من نگاه کنید 90% کار رو متوجه میشید تو این کلاس تابع extract میاد یک آرایه میگیره که همونdata هست و اندیس هاشو تبدیل به متغییر میکنه که تو ویو بشه استفاده کرد
<?php
/**
*
*/
class View
{
public function render($name,$data=array(),$show=true) {
extract($data);
if ($show==true) {
require 'views/header/header.php';
require 'views/' . $name . '.php';
require 'views/header/sidebar.php';
require 'views/header/footer.php';
}elseif ($show==false) {
require 'views/header/header_admin.php';
require 'views/header/sidebar_admin.php';
require 'views/' . $name . '.php';
}
}
public function renderp($name,$data=array()) {
extract($data);
require 'views/' . $name . '.php';
}
}
?>
نقل قول: چگونگی گرفتن method در php mvc
ممنون
بله؛ متوجه شدم. فقط یک سوالی برام پیش اومده و اون اینکه آیا این روشی که وقتی داریم view را render میکنیم(یعنی اینکه یک object ازش میسازیم) داده هارو بهش assign کنیم روش درستی هست؟
چون تو object فعلی مثلا Index با توجه به اون آموزش من و اون توضیحاتی که دادم و object ایندکس رو براتون رسم کردم درسته دوباره بیایم و به object فرزند model رو بدیم؟
روشی نیست که در object فعلی بشه به object بالایی دست پیدا کرد؟
نقل قول: چگونگی گرفتن method در php mvc
در مورد assign کردن بله درسته و مشکلی نداره.در مورد model میشه منظورتون رو واضح تر بگید؟متوجه منظورتون نشدم؟
نقل قول: چگونگی گرفتن method در php mvc
ممنون از توضیحتون
متوجه مشکلم شدم. اشکال من اینجا بود که از assign کردن model به object اصلی اول view رو به object اختصاص میدادم که با تغییر کد مشکلم حل شد.
حالا یک مشکل جدید برام پیش اومده:لبخندساده:
اون هم اینکه من در یک صفحه فرمی دارم که به طور مثال کاربر نام خانوادگی وارد میکنه. حالا این فرم ابتدا به controller و سپس به model صفحه مربوطه فرستاده میشه و در تابع مورد نظری که من خواستم query اجرا میشه. اما من action فرم رو به صورت report/family گذاشتم. وقتی فرم ارسال میشه url عوض میشه و از localhost/report به localhost/report/family تبدیل میشه که وقتی دوباره میخوام جستجو کنم با پیغام mothod not found رو به رو میشم. برای این مشکل چه راه حلی هست؟
و اینکه وقتی از تابع family بخوام دوباره به view داده بدم باید چه کنم؟
نقل قول: چگونگی گرفتن method در php mvc
برای آدرس دادن توی action آدرس سایتتون رو تو یک ثابت تعریف کنید و از ادامه ثابت آدرس دهی کنید.در مورد تابع family هم اگه تو کنترلر تو آرایه data مدل رو فراخوانی کنید تو ویو اندیس اون آرایه متغییر میشه و به آسانی میتونید ازش استفاده کنید.البته این روش mvc که من استفاده میکنمه باید ببینید اون آموزش چیکار میکنه؟
نقل قول: چگونگی گرفتن method در php mvc
این روشی که شما دارین کار میکنین، معماری قدیمی MVC هست. بهتره با الگوی جدید کار کنید. توی الگوی جدید مشکلی نیست که ویو به دیتابیس دسترسی داشته باشه (البته نه اینکه مستقیماً کوئری بزنه بلکه با کمک مدل باید کارهاش رو انجام بده). در روش جدید سه بخش Model و View و Controller هرکدوم مستقل هستن و به هم دسترسی دارن. البته اگه دقیقتر بخوایم بگیم، View دیگه شئ نیست بلکه یک فایل ساده است که توسط کنترلر صدا زده میشه و درنتیجه توی ویو با کمک this$ به خود کنترلر دسترسی خواهید داشت. لزومی هم برای همنام بودن متدها و... وجود نداره.
نقل قول: چگونگی گرفتن method در php mvc
گفته شما درسته ولی بعضی جاها نیازه که داده ها از کنترلر به ویو داده بشه.نمونش هم چند ماه پیش خودتون پست زده بودید و گفتید
نقل قول: چگونگی گرفتن method در php mvc
منظور من روش استارتر بود. روش شما مشکلی نداره.
نقل قول: چگونگی گرفتن method در php mvc
ببخشید خیال کردم برای من رو میگید