آموزش رایگان PHP

آموزش کامل معماری MVC در PHP به زبان ساده و گام به گام

1405/07/28 22:57 محراب حسن زاده
آموزش کامل معماری MVC در PHP به زبان ساده و گام به گام

معماری MVC چیست؟

معماری MVC یا Model-View-Controller یک الگوی طراحی نرم‌افزار (Design Pattern) است که برای جداسازی منطق برنامه (Logic) از رابط کاربری (UI) استفاده می‌شود. این الگو به شما کمک می‌کند پروژه‌های بزرگ را به صورت ماژولار و بسیار تمیز پیاده‌سازی کنید تا چندین توسعه‌دهنده بتوانند به طور همزمان بدون تداخل کدهای یکدیگر روی بخش‌های مختلف کار کنند.

اجزای اصلی معماری MVC

این معماری از سه بخش اصلی تشکیل شده است که هر کدام وظیفه مشخصی را بر عهده دارند:

  • Model (مدل): مسئول مستقیم مدیریت داده‌ها، ارتباط با پایگاه داده و منطق محاسباتی برنامه است. مدل هیچ اطلاعی از نحوه نمایش داده‌ها ندارد.
  • View (نمایش): رابط کاربری برنامه است. تمام کدهای HTML، CSS و المان‌های بصری که کاربر مشاهده می‌کند در این لایه قرار دارند.
  • Controller (کنترلر): به عنوان واسط کاربری عمل می‌کند. درخواست کاربر را دریافت کرده، اطلاعات لازم را از مدل فراخوانی می‌کند و سپس پاسخ مناسب را جهت نمایش به سمت ویو ارسال می‌کند.

ساختار پوشه‌بندی استاندارد در پروژه MVC PHP

داشتن یک پوشه‌بندی استاندارد، گام نخست در پیاده‌سازی صحیح معماری MVC است. ساختار زیر یک ساختار ساده و استاندارد برای پروژه‌های PHP بر پایه MVC است:


myapp/
├── app/
│   ├── controllers/
│   │   └── UserController.php
│   ├── models/
│   │   └── User.php
│   └── views/
│       └── user_view.php
├── public/
│   └── index.php
└── .htaccess

پیاده‌سازی گام به گام اجزا در PHP

بیایید یک مینی‌پروژه کوچک برای نمایش اطلاعات کاربر با استفاده از الگوی MVC پیاده‌سازی کنیم.

۱. پیاده‌سازی مدل (Model)

مدل کلاسی است که مستقیماً با داده‌ها سر و کار دارد. فایل User.php را در مسیر app/models/ ایجاد می‌کنیم:


class User {
    public function getUserData() {
        // در واقعیت این داده‌ها از پایگاه داده لود می‌شوند
        return [
            'name' =--> 'پارسا راد',
            'role' => 'توسعه‌دهنده ارشد PHP',
            'email' => 'parsa@example.com'
        ];
    }
}

۲. پیاده‌سازی کنترلر (Controller)

کنترلر درخواست را گرفته، داده‌ها را از مدل دریافت و به ویو پاس می‌دهد. فایل UserController.php را در مسیر app/controllers/ ایجاد می‌کنیم:


require_once '../app/models/User.php';

class UserController {
    public function showProfile() {
        // نمونه‌سازی از کلاس مدل
        $userModel = new User();
        $userData = $userModel--->getUserData();
        
        // فرستادن اطلاعات دریافت شده به فایل ویو جهت رندر نهایی
        require_once '../app/views/user_view.php';
    }
}

۳. پیاده‌سازی ویو (View)

ویو اطلاعات دریافت شده را درون کدهای HTML نمایش می‌دهد. فایل user_view.php را در مسیر app/views/ ایجاد می‌کنیم:


< !DOCTYPE html >
< html lang="fa" dir="rtl" >
< head >
    < meta charset="UTF-8" >
    < title >پروفایل کاربر< / title >
< / head >
< body >
    < div class="profile-card" >
        < h2 >پروفایل کاربری< / h2 >
        < p >< strong >نام:< / strong > < / p >
        < p >< strong >سمت:< / strong > < / p >
        < p >< strong >ایمیل:< / strong > < / p >
    < / div >
< / body >
< / html >

۴. نقطه ورود برنامه (Front Controller)

در پروژه‌های مدرن MVC، تمام درخواست‌ها ابتدا به یک فایل به نام index.php فرستاده می‌شوند. فایل public/index.php نقش هماهنگ‌کننده یا روتینگ را ایفا می‌کند:


// لود کردن کنترلر به صورت دستی یا از طریق Autoloader
require_once '../app/controllers/UserController.php';

// شبیه‌سازی یک روتینگ ساده
$action = isset($_GET['action']) ? $_GET['action'] : 'profile';

if ($action === 'profile') {
    $controller = new UserController();
    $controller--->showProfile();
} else {
    echo "404 - صفحه پیدا نشد!";
}

چرا باید از معماری MVC استفاده کنیم؟

استفاده از معماری MVC مزایای متعددی به همراه دارد:

  • جداسازی وظایف (Separation of Concerns): کدهای دیتابیس، منطق برنامه و فرانت‌اند کاملاً مستقل از هم هستند.
  • قابلیت نگهداری بالا (Maintainability): تغییر در ظاهر سایت نیاز به دستکاری کدهای پایگاه‌داده ندارد.
  • تست‌پذیری راحت‌تر (Unit Testing): از آنجایی که کلاس‌ها مستقل هستند، نوشتن سناریوهای تست به شدت آسان‌تر می‌شود.

پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش کامل دستور switch-case در PHP (به همراه مثال‌های کاربردی)
1405/04/04 00:08

آموزش کامل دستور switch-case در PHP (به همراه مثال‌های کاربردی)

مطالعه بیشتر
راهنمای جامع معرفی PHP؛ تاریخچه، ویژگی‌ها و جایگاه آن در توسعه وب
1405/03/14 23:35

راهنمای جامع معرفی PHP؛ تاریخچه، ویژگی‌ها و جایگاه آن در توسعه وب

مطالعه بیشتر
آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر
1402/11/02 23:23

آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر

مطالعه بیشتر
آموزش جامع مدیریت خطاها در PHP بر اساس استانداردهای گوگل
1405/05/01 20:23

آموزش جامع مدیریت خطاها در PHP بر اساس استانداردهای گوگل

مطالعه بیشتر
مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها
1403/07/28 21:58

مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مطالعه بیشتر
آموزش کامل کار با fopen، سطوح دسترسی و حذف فایل در PHP
1405/05/04 23:28

آموزش کامل کار با fopen، سطوح دسترسی و حذف فایل در PHP

مطالعه بیشتر
آموزش کار با رویدادهای فرم و اعتبارسنجی فرم‌ها در جاوا اسکریپت: راهنمای جامع
1403/08/03 16:47

آموزش کار با رویدادهای فرم و اعتبارسنجی فرم‌ها در جاوا اسکریپت: راهنمای جامع

مطالعه بیشتر
آموزش جامع اعتبارسنجی حجم و نوع فایل آپلودی در PHP طبق استانداردهای امنیتی گوگل
1405/05/01 20:20

آموزش جامع اعتبارسنجی حجم و نوع فایل آپلودی در PHP طبق استانداردهای امنیتی گوگل

مطالعه بیشتر
آموزش ساخت افکت تصویر با تم اینستاگرام و انیمیشن چرخش دوره‌ای در CSS
1405/03/13 01:45

آموزش ساخت افکت تصویر با تم اینستاگرام و انیمیشن چرخش دوره‌ای در CSS

مطالعه بیشتر
درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی
1404/09/28 22:00

درک و استفاده از Watchers در Vue.js | آموزش Watch با مثال کاربردی

مطالعه بیشتر
کنترل زمان‌بندی و اندازه‌گیری دقیق انیمیشن‌ها در CSS: آموزش جامع و اصول استاندارد
1402/06/18 22:55

کنترل زمان‌بندی و اندازه‌گیری دقیق انیمیشن‌ها در CSS: آموزش جامع و اصول استاندارد

مطالعه بیشتر
پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of
1403/07/04 18:12

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of

مطالعه بیشتر

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