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

آموزش ساخت پروژه MVC با PHP خام به صورت گام به گام طبق استانداردهای روز

1405/08/02 15:12 محراب حسن زاده
آموزش ساخت پروژه MVC با PHP خام به صورت گام به گام طبق استانداردهای روز

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

در توسعه وب‌سایت‌ها با PHP خام (Vanilla PHP)، پروژه‌های کوچک معمولاً بدون ساختار خاصی نوشته می‌شوند. کدهای HTML، کوئری‌های SQL و منطق برنامه همگی در یک فایل مخلوط می‌شوند که به آن اصطلاحاً «کد اسپاگتی» می‌گویند. معماری MVC (Model-View-Controller) پاسخی به این بی‌نظمی است و کمک می‌کند برنامه ما طبق استانداردهای توسعه مدرن به ۳ بخش کاملاً مجزا تفکیک شود.

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

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

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

my-mvc-project/
├── app/
│   ├── Controllers/
│   │   └── UserController.php
│   ├── Models/
│   │   └── UserModel.php
│   ├── Views/
│   │   └── user_list.php
│   └── core/
│       ├── App.php
│       ├── Controller.php
│       └── Database.php
├── public/
│   ├── css/
│   ├── js/
│   └── index.php
└── .htaccess

گام اول: هدایت تمام درخواست‌ها به فایل اصلی (.htaccess)

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

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

گام دوم: طراحی سیستم روتینگ هوشمند (Routing)

کلاس App.php در هسته سیستم وظیفه آنالیز آدرس URL و فراخوانی متد و کنترلر مناسب را بر عهده دارد:


class App {
    protected $controller = 'HomeController';
    protected $method = 'index';
    protected $params = [];

    public function __construct() {
        $url = $this->parseUrl();

        if (file_exists('../app/Controllers/' . ucfirst($url[0]) . 'Controller.php')) {
            $this->controller = ucfirst($url[0]) . 'Controller';
            unset($url[0]);
        }

        require_once '../app/Controllers/' . $this->controller . '.php';
        $this->controller = new $this->controller;

        if (isset($url[1])) {
            if (method_exists($this->controller, $url[1])) {
                $this->method = $url[1];
                unset($url[1]);
            }
        }

        $this->params = $url ? array_values($url) : [];
        call_user_func_array([$this->controller, $this->method], $this->params);
    }

    private function parseUrl() {
        if (isset($_GET['url'])) {
            return explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
        }
        return ['home'];
    }
}

گام سوم: ساخت کلاس کنترلر پایه (Base Controller)

کلاس کنترلر پایه به ما اجازه می‌دهد مدل‌ها را به سادگی لود کرده و داده‌ها را به لایه نمایش (View) بفرستیم:


class Controller {
    public function model($model) {
        require_once '../app/Models/' . $model . '.php';
        return new $model();
    }

    public function view($view, $data = []) {
        require_once '../app/Views/' . $view . '.php';
    }
}

گام چهارم: پیاده‌سازی لایه مدل (Model) برای شبیه‌سازی داده‌ها

لایه مدل مستقیماً داده‌ها را مدیریت می‌کند. در این بخش یک متد برای بازگرداندن اطلاعات کاربران از دیتابیس شبیه‌سازی می‌کنیم:


class UserModel {
    public function getAllUsers() {
        return [
            ['id' => 1, 'name' => 'علی احمدی', 'role' => 'مدیر سیستم'],
            ['id' => 2, 'name' => 'مریم رضایی', 'role' => 'نویسنده ارشد']
        ];
    }
}

گام پنجم: ادغام همه‌چیز در کنترلر اختصاصی و نمایش خروجی (View)

اکنون کنترلر مخصوص کاربران را ایجاد کرده و لایه‌های Model و View را در آن هماهنگ می‌کنیم:


class UserController extends Controller {
    public function index() {
        $userModel = $this->model('UserModel');
        $users = $userModel->getAllUsers();

        // ارسال داده‌ها به فایل ویو
        $this->view('user_list', ['users' => $users]);
    }
}

حالا در لایه View (فایل app/Views/user_list.php) داده‌ها را با ساختار تمیز نمایش می‌دهیم:

< !DOCTYPE html >
< html lang='fa' dir='rtl' >
< head >
    < meta charset='UTF-8' >
    < title >لیست کاربران< / title >
< / head >
< body >
    < h1 >لیست کاربران سیستم< / h1 >
    < ul >
        < ?php foreach ($data['users'] as $user): ? >
            < li >< ?= htmlspecialchars($user['name']) ? > (< ?= htmlspecialchars($user['role']) ? >)< / li >
        < ?php endforeach; ? >
    < / ul >
< / body >
< / html >

نتیجه‌گیری و مزیت اجرای پروژه با استاندارد گوگل

با پیاده‌سازی این معماری، کدهای بک‌اند شما به کدهایی تمیز، قابل توسعه و ماژولار تبدیل می‌شوند. این روش باعث بهینه‌سازی سرعت لود، خوانایی بالا برای ربات‌های موتور جستجو (از طریق ساختار آدرس‌دهی تمیز SEO-Friendly URLs) و سهولت در توسعه گروهی می‌شود.


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش ارث‌بری (Inheritance) در PHP به زبان ساده + مثال‌های کاربردی
1405/07/28 22:21

آموزش ارث‌بری (Inheritance) در PHP به زبان ساده + مثال‌های کاربردی

مطالعه بیشتر
Lifecycle Hooks در Vue.js | مدیریت چرخه حیات کامپوننت‌ها با مثال کاربردی
1404/09/29 20:53

Lifecycle Hooks در Vue.js | مدیریت چرخه حیات کامپوننت‌ها با مثال کاربردی

مطالعه بیشتر
آموزش کامل دریافت اطلاعات فرم با متدهای GET و POST در PHP (با رعایت اصول امنیتی)
1405/04/27 22:06

آموزش کامل دریافت اطلاعات فرم با متدهای GET و POST در PHP (با رعایت اصول امنیتی)

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

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

مطالعه بیشتر
راهنمای جامع پاک‌سازی داده‌های ورودی در PHP بر اساس استانداردهای گوگل
1405/04/27 22:21

راهنمای جامع پاک‌سازی داده‌های ورودی در PHP بر اساس استانداردهای گوگل

مطالعه بیشتر
معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی
1402/06/28 00:33

معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی

مطالعه بیشتر
آموزش جامع و کاربردی کار با فایل‌ها در PHP
1405/05/04 23:14

آموزش جامع و کاربردی کار با فایل‌ها در PHP

مطالعه بیشتر
آموزش جامع برنامه‌نویسی شی‌گرا (OOP) در PHP بر اساس استانداردهای گوگل
1405/05/15 00:33

آموزش جامع برنامه‌نویسی شی‌گرا (OOP) در PHP بر اساس استانداردهای گوگل

مطالعه بیشتر
آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب
1403/08/12 20:18

آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب

مطالعه بیشتر
استفاده از Viewports و Viewport Units در CSS: طراحی واکنش‌گرا با vw، vh، vmin و vmax
1403/08/16 22:30

استفاده از Viewports و Viewport Units در CSS: طراحی واکنش‌گرا با vw، vh، vmin و vmax

مطالعه بیشتر
راهنمای کامل لیست‌ها در HTML: آموزش انواع و اصول سئو
1402/05/20 22:02

راهنمای کامل لیست‌ها در HTML: آموزش انواع و اصول سئو

مطالعه بیشتر
استفاده از Flexbox در CSS برای چیدمان‌های مدرن: راهنمای جامع و کاربردی
1403/08/10 21:59

استفاده از Flexbox در CSS برای چیدمان‌های مدرن: راهنمای جامع و کاربردی

مطالعه بیشتر

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