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

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

هیچ ارتباطی بین model و view بصورت مستقیم وجود ندارد و تنها راه ارتباط آنها با هم از طریق controller ها ی مربوطه است.

 

نحوه اجرای یک model از طریق controller

برای مثال اگر کاربر وارد صفحه ای به نشانی “http://localhost/mvc/admin” شود در این صفحه ممکن است قصد داشته باشیم فرمی را نمایش دهیم که پس از ارسال داده هایش آنالیز و در پایگاه داده ثبت شود یا قرار است اطلاعاتی را از پایگاه داده دریافت کرده و در view نمایش دهیم.فرض کنید قرار است اطلاعاتی از پایگاه داده دریافت کرده و در view مربوط به admin نمایش دهیم.

برای اینکار model وارد عمل می شود و با پایگاه داده ارتباط برقرار کرده و نتیجه از طریق controller در view نمایش داده می شود.

 

نحوه ساخت model جدید

در جلسات قبل همانطور که توضیح دادیم در پوشه App فایلی به نام Controllers داشتیم که تمامی کنترلرها از روی آن ارث بری می کردند. برای ساخت model جدید می توانیم از این فایل استفاده کرد و تابع فراخوانی مدل ها را درون این فایل ایجاد کنیم.

 

محتوای فایل Controllers درون پوشه App

همانطور که توضیح دادیم درون این فایل دستوراتی را قرار دادیم که درون کنترلرهای نرم افزار مورد استفاده قرار می گیرد.نمونه این دستور تابع showView است.این تابع وظیفه نمایش view را برعهده دارد.

مثال:

هر controller برحسب نیاز دارای یک model و یک فایل view بصورت جداگانه است.

در پوشه Models فایل جدیدی برای مدل AdminModel به نام AdminModel.php می سازیم.این فایل حاوی کلاس مربوط به مدل AdminModel است.

 

دستورات مربوط به فایل AdminModel.php در پوشه Models

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

مثال:

 

نحوه فراخوانی مدل درون کنترلر خاص

برای اینکه بتوانیم مدل و متد مربوط به آن را درون کنترلر فراخوانی کنیم باید دستور مربوط به فراخوانی مدل را درون کنترلر مربوطه اجرا نماییم.برای مثال ما در کنترلر Admin در متد index دستور فراخوانی مدل AdminModel را وارد می نماییم.

سپس باید یک شی از روی کلاس مدل خود ایجاد نمائیم. آبجکت ساخته شده از روی کلاس مدل را به یک خصوصیت به نام model در کنترلر Admin تخصیص می دهیم.

مثال:

حال اگر دستور this$ را var_dump بگیریم آبجکت AdminModel مربوط به model درون کلاس Admin مربوط به کنترلر قرار دارد.

نمونه کنترلر Admin که در متد index مدل AdminModel فراخوانی شده است.

مثال:

حال می توانیم به متدهای درون model اشاره کنیم.در اینجا به متد insertUser برای درج کاربر جدید در پایگاه داده اشاره می کنیم.

مثال:

با اجرای این متد از طریق model می توانیم داده جدیدی را در پایگاه داده ثبت نماییم.پس دیدیم که میتوان در جایی که در کنترلر نیاز به ارتباط با پایگاه داده هستیم به چه شکل عمل کنیم.

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

کلاسی که در همه کلاس ها به ارث برده می شود فایل Controllers در پوشه App است.این فایل را باز می کنیم.در این کلاس تنها یک تابع وجود داشت که وظیفه فراخوانی view را برعهده داشت.در این فایل دستور فراخوانی model را ایجاد می کنیم.

تابعی به نام showModel ایجاد می کنیم و نوع آن را public قرار می دهیم.این تابع دارای یک آرگومان است.آرگومان وظیفه دریافت نام مدل را دارد.

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

حال دوباره به کنترلر Admin می رویم و در متد index دستور فراخوانی showModel را وارد می کنیم.

مثال:

با رفتن به آدرس “http://localhost/mvc/admin” رکورد جدیدی در جدول “tbl_users” درج می شود.

 

فراخوانی سریع Model مربوط به کنترلر با استفاده از تابع سازنده

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

نمونه فایل کنترلر Admin.php که متد showModel درون تابع سازنده آن فراخوانی شده و درون متد index متد insertUser فراخوانی شده است.

مثال:

حال اگر به آدرس “http://localhost/mvc/admin” بروید بخاطر فراخوانی شدن تابع index کنترلر admin متد insertUser بهمراه مقدار یک آرایه فراخوانی شده و یک رکورد جدید در پایگاه داده ثبت می شود.

با این روش توانستیم کنترلر، مدل و view خود را براساس آدرس درخواستی مدیریت کنیم.فایل نهایی mvc مربوط به دوره آموزش MVC در php برای دانلود قرار داده شده است.

دیدگاه خود را بیان کنید

این ایمیل برای عموم منتشر نمی شود