🏗️ درس ششم: ساختاردهی پروژه (MVC مقدماتی)؛ نظم دادن به کدها
🎯 هدف این درس: یادگیری الگوی معماری MVC (Model-View-Controller)، جداسازی منطق برنامه از ظاهر سایت و ایجاد یک ساختار پوشهبندی حرفهای برای پروژههای PHP.
مهمان عزیز! 👋
تا الان تمام کدهای ما (اتصال به دیتابیس، کوئریها، HTML و منطق برنامه) در یک یا دو فایل پخش بود. این روش برای پروژههای کوچک خوب است، اما وقتی پروژه بزرگ میشود، پیدا کردن یک خط کد خاص مثل پیدا کردن سوزن در انبار کاه میشود!
برای حل این مشکل، از الگوی MVC استفاده میکنیم. این الگو کدهای شما را به سه بخش اصلی تقسیم میکند تا هم تمیزتر باشند و هم توسعه آنها آسانتر شود.
💡 MVC چیست؟
۱. Model (مدل): مسئول ارتباط با دیتابیس و دادهها.
۲. View (نما): مسئول نمایش اطلاعات به کاربر (فقط HTML/CSS).
۳. Controller (کنترلر): مغز متفکر که درخواست کاربر را میگیرد، از مدل داده میخواهد و به ویو میفرستد.
📂 مرحله ۱: ساختار پوشهبندی استاندارد
قبل از کدنویسی، باید پوشههای پروژه را مرتب کنیم. یک ساختار پیشنهادی برای پروژههای رجستری به شکل زیر است:
Project Structure
Directory
v1.0
rajestary-project/
├── config/
│ └── database.php // اطلاعات اتصال به دیتابیس
├── controllers/
│ └── UserController.php // منطق مدیریت کاربران
├── models/
│ └── User.php // کوئریهای دیتابیس مربوط به کاربر
├── views/
│ ├── header.php
│ ├── footer.php
│ └── users-list.php // فایل HTML نمایش لیست کاربران
├── public/
│ ├── css/
│ ├── js/
│ └── index.php // نقطه ورود اصلی سایت
└── uploads/ // محل ذخیره فایلهای آپلود شده
🔌 مرحله ۲: فایل Config (پیکربندی)
به جای اینکه هر بار اطلاعات دیتابیس را بنویسیم، آن را در یک فایل مرکزی ذخیره میکنیم.
config/database.php
PHP
8.x
<?php
return [
'host' => 'localhost',
'dbname' => 'rajestary_db',
'username' => 'root',
'password' => ''
];
🧠 مرحله ۳: نوشتن Model و Controller
حالا منطق را جدا میکنیم. Model فقط داده میآورد و Controller تصمیم میگیرد چه کاری با آن انجام دهد.
controllers/UserController.php
PHP
8.x
<?php
// فراخوانی مدل
require_once '../models/User.php';
class UserController {
public function index() {
$userModel = new User();
$users = $userModel->getAllUsers();
// ارسال داده به View
include '../views/users-list.php';
}
}
🎨 مرحله ۴: View (ظاهر سایت)
در فایل View، دیگر هیچ کد پیچیدهای نداریم و فقط دادهها را نمایش میدهیم.
views/users-list.php
PHP/HTML
Mixed
<h2>لیست کاربران</h2>
<ul>
<?php foreach ($users as $user): ?>
<li>
<?= htmlspecialchars($user['name']) ?> -
<?= htmlspecialchars($user['email']) ?>
</li>
<?php endforeach; ?>
</ul>
❌ خطاهای رایج در MVC
🚫 اشتباه رایج:
نوشتن کوئری SQL داخل Controller یا View. قانون طلایی: View فقط نمایش میدهد، Model فقط داده میآورد و Controller فقط هماهنگ میکند.
- عدم استفاده از htmlspecialchars: در View همیشه دادهها را قبل از نمایش sanitize کنید تا از XSS جلوگیری شود.
- پیچیدگی بیش از حد: برای پروژههای خیلی کوچک، MVC کامل ممکن است زیادهروی باشد. اما یادگیری آن برای آینده ضروری است.
🏁 جمعبندی درس ششم
مهمان عزیز، در این درس یاد گرفتی:
- ✅ مفهوم MVC و اهمیت جداسازی لایهها.
- ✅ نحوه ساختاردهی پوشههای یک پروژه حرفهای.
- ✅ نقش هر کدام از فایلهای Config, Model, View و Controller.
- ✅ چگونه داده را از Model به View منتقل کنیم.
🎓 تمرین عملی درس ششم
ساختار پوشهبندی بالا را روی هاست محلی خود ایجاد کن و سعی کن همان لیست کاربران درس قبل را با این ساختار جدید بازنویسی کنی.
🗺️ نقشه راه دوره: شما اینجا هستید!
برای اینکه بدانی دقیقاً کجای مسیر هستی و چه درسهایی در انتظار توست، به جدول زیر نگاه کن. درس فعلی با رنگ متفاوت مشخص شده است.
| درس | عنوان درس | آنچه یاد میگیرید |
|---|---|---|
| ۱ | ارتباط با دیتابیس (PDO) | اتصال امن به MySQL، جلوگیری از SQL Injection |
| ۲ | مدیریت نشستها (Sessions) | ساخت سیستم لاگین/خروج، مدیریت دسترسی کاربران |
| ۳ | کار با فایلها (File Handling) | آپلود تصویر، خواندن و نوشتن در فایلها |
| ۴ | مدیریت خطاها (Error Handling) | استفاده از Try/Catch، لاگگیری خطاها |
| ۵ | مقدمهای بر شیگرایی (OOP) | کلاس، شیء، متد، ویژگیها |
| ۶ | ساختاردهی پروژه (MVC مقدماتی) | جداسازی منطق از ظاهر، فایلهای Config |
| ۷ | امنیت پیشرفته | هش کردن پسورد، محافظت در برابر XSS و CSRF |
| ۸ | کار با API (مقدماتی) | دریافت داده از API خارجی (cURL)، JSON |
| ۹ | پروژه نهایی سطح متوسط | ساخت وبلاگ کامل با قابلیت لاگین و مدیریت |



