🏆 درس دهم: پروژه نهایی پیشرفته؛ ساخت یک CMS ماژولار با قابلیت نصب پلاگین
🎯 هدف این درس: ترکیب تمام مفاهیم پیشرفته دوره (SOLID, Design Patterns, Composer, Redis, Queue, API, Security) در یک پروژه واقعی و مقیاسپذیر. ساخت هسته یک سیستم مدیریت محتوا (CMS) که از معماری ماژولار پشتیبانی میکند.
مهمان عزیز! 👋
به آخرین و چالشبرانگیزترین درس دوره خوش آمدی. تا اینجا ابزارهای قدرتمندی را یاد گرفتی، اما هنر اصلی در «ترکیب» آنهاست.
در این پروژه، ما یک CMS ساده اما حرفهای میسازیم که برخلاف سیستمهای قدیمی، دارای هسته مرکزی کوچک است و تمام قابلیتهای اضافی (مثل وبلاگ، فروشگاه، فرمساز) به صورت پلاگین به آن اضافه میشوند. این همان معماری است که وردپرس یا لاراول بر اساس آن کار میکنند.
💡 ویژگیهای کلیدی پروژه:
- استفاده از الگوی MVC برای جداسازی منطق.
- سیستم Routing اختصاصی برای مدیریت URLها.
- مدیریت وابستگی با Composer.
- قابلیت کشینگ با Redis برای سرعت بالا.
- امنیت لایهای با CSP و JWT.
- معماری ماژولار برای توسعه آسان.
📂 مرحله ۱: ساختار پوشهبندی ماژولار
برخلاف پروژههای قبلی، اینجا ساختار بسیار منظمتر است. هر ماژول (پلاگین) پوشه مخصوص خود را دارد.
Project Structure
Directory
v2.0
rajestary-cms/
│
├── core/ // هسته اصلی سیستم
│ ├── Router.php
│ ├── Database.php
│ └── App.php
│
├── modules/ // محل قرارگیری ماژولها
│ ├── Blog/
│ │ ├── Controllers/
│ │ ├── Models/
│ │ └── Views/
│ └── Auth/
│ ├── Controllers/
│ └── Middleware/
│
├── config/ // تنظیمات کلی
│ ├── database.php
│ └── app.php
│
├── public/ // تنها پوشه قابل دسترسی از وب
│ ├── index.php // نقطه ورود اصلی
│ ├── css/
│ └── js/
│
├── vendor/ // پکیجهای Composer
├── composer.json
└── .env // متغیرهای محیطی
🚦 مرحله ۲: پیادهسازی Router مرکزی
قلب تپنده CMS ما یک Router ساده است که درخواستها را به کنترلرهای مناسب هدایت میکند.
core/Router.php
PHP
8.x
<?php
namespace Core;
class Router {
private $routes = [];
public function add($method, $path, $controller) {
$this->routes[$method][$path] = $controller;
}
public function dispatch($uri, $method) {
if (isset($this->routes[$method][$uri])) {
$controller = $this->routes[$method][$uri];
return call_user_func($controller);
}
http_response_code(404);
echo "صفحه مورد نظر یافت نشد.";
}
}
🧩 مرحله ۳: ساخت اولین ماژول (وبلاگ)
حالا یک کنترلر برای ماژول وبلاگ میسازیم که از کشینگ Redis استفاده میکند.
modules/Blog/Controllers/PostController.php
PHP
8.x
<?php
namespace Modules\Blog\Controllers;
use Core\Database;
use Predis\Client as Redis;
class PostController {
public function index() {
$redis = new Redis();
$cacheKey = 'blog_posts_all';
if ($redis->exists($cacheKey)) {
$posts = json_decode($redis->get($cacheKey), true);
} else {
$db = Database::getInstance();
$posts = $db->query("SELECT * FROM posts");
// ذخیره در کش به مدت ۱ ساعت
$redis->setex($cacheKey, 3600, json_encode($posts));
}
include '../modules/Blog/Views/index.php';
}
}
🔐 مرحله ۴: امنیت و Middleware
قبل از اجرای کنترلر، درخواست از فیلترهای امنیتی (Middleware) عبور میکند.
core/Middleware/Auth.php
PHP
8.x
<?php
namespace Core\Middleware;
class Auth {
public static function check() {
$token = $_SERVER['HTTP_AUTHORIZATION'] ?? null;
if (!$token || !self::verifyJwt($token)) {
http_response_code(401);
die("دسترسی غیرمجاز");
}
}
private static function verifyJwt($token) {
// منطق بررسی توکن JWT
return true; // شبیهسازی
}
}
❌ چالشهای رایج در پروژههای ماژولار
🚫 اشتباه رایج:
وابستگی شدید ماژولها به یکدیگر. ماژولها باید مستقل باشند و فقط با هسته مرکزی (Core) ارتباط داشته باشند، نه با هم.
- نامگذاری ناهماهنگ: استفاده از نامهای تکراری برای کلاسها در ماژولهای مختلف.
- عدم مدیریت نسخهها: اگر یک ماژول نیاز به کتابخانه خاصی دارد، باید در composer.json خودش مدیریت شود.
🏁 جمعبندی نهایی دوره پیشرفته
مهمان عزیز، تبریک میگویم! تو اکنون از مرز یک برنامهنویس معمولی عبور کردهای.
- ✅ تسلط بر اصول مهندسی نرمافزار (SOLID & Patterns).
- ✅ توانایی کار با ابزارهای مدرن (Composer, Redis, PHPUnit).
- ✅ درک عمیق از امنیت لایهای و API نویسی.
- ✅ تجربه ساخت یک سیستم ماژولار و مقیاسپذیر.
🎓 قدم بعدی چیست؟
پیشنهاد میکنیم برای حرفهایتر شدن، سراغ یادگیری یک فریمورک مدرن مثل Laravel بروید یا دورههای تخصصی DevOps را دنبال کنید.
🗺️ نقشه راه دوره: پایان مسیر
تو با موفقیت تمام دروس این دوره را پشت سر گذاشتی. امیدواریم این دانش پایهای محکم برای آینده شغلی تو باشد.
| درس | عنوان درس | وضعیت |
|---|---|---|
| ۱ تا ۹ | دروس قبلی… | ✅ تکمیل شده |
| ۱۰ | پروژه نهایی پیشرفته | 🏆 در حال انجام |



