RAJESTARY DIGITAL TECH • SECURITY • EDUCATION
دانش • فناوری • امنیت

دنیای تکنولوژی
از یادگیری شروع می‌شود

آموزش‌های کاربردی، برنامه‌نویسی، امنیت و فناوری برای ساختن، یادگرفتن و بهتر زندگی کردن با تکنولوژی.

LEARN BUILD SECURE CREATE

ساخت یک CMS ماژولار با قابلیت نصب پلاگین

ساخت یک CMS ماژولار با قابلیت نصب پلاگین

🏆 درس دهم: پروژه نهایی پیشرفته؛ ساخت یک 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 را دنبال کنید.


🚀 مشاهده سایر دوره‌ها


🗺️ نقشه راه دوره: پایان مسیر

تو با موفقیت تمام دروس این دوره را پشت سر گذاشتی. امیدواریم این دانش پایه‌ای محکم برای آینده شغلی تو باشد.

درس عنوان درس وضعیت
۱ تا ۹ دروس قبلی… ✅ تکمیل شده
۱۰ پروژه نهایی پیشرفته 🏆 در حال انجام

🔗 لینک‌های مرتبط

👤
نویسنده یونس رجستری
📅
تاریخ انتشار 28 مرداد 1405
🔄
آخرین بروزرسانی 28 مرداد 1405
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

⚠️

هشدار مهم!

برای اتصال به درگاه پرداخت و انجام تراکنش، لطفاً VPN یا فیلترشکن خود را خاموش کنید.

⏳ ادامه در
5
ثانیه