پلتفرم کامل PHP MVC برای مدیریت سالنهای زیبایی و آرایشگاهی
رزرو آنلاین · فروشگاه اینترنتی · پنل کاربری · پنل ادمین · وبلاگ
| ماژول | توضیحات |
|---|---|
| 📅 رزرو آنلاین | زمانبندی نوبت، انتخاب سرویس و پرسنل، یادآوری خودکار |
| 🛍️ فروشگاه | کاتالوگ محصولات، سبد خرید، درگاه پرداخت زرینپال، پیگیری سفارش |
| 👤 پنل کاربری | مدیریت پروفایل، تاریخچه نوبتها و سفارشها، علاقهمندیها، کیف پول |
| ⚙️ پنل ادمین | مدیریت سرویسها، محصولات، پستهای وبلاگ، نوبتها، سفارشها، کاربران، گالری |
| 📝 وبلاگ | وبلاگ فارسی با دستهبندی، نظرات، جستجو، اشتراکگذاری |
| 🖼️ گالری رسانه | آپلود تصویر و ویدئو، استریم، پشتیبانی از چند منبع |
| 🎓 آکادمی | دورههای آموزشی، ویدئوهای آموزشی، گواهینامه پایان دوره |
| 💳 پرداخت | درگاه پرداخت زرینپال با تأیید و بازگشت خودکار |
| 🔒 امنیت | CSRF token، Rate Limiting، Prepared Statements، اعتبارسنجی ورودی |
| 📱 واکنشگرا | رابط کاربری Bootstrap 5.3 با پشتیبانی کامل از RTL فارسی |
| 🚀 عملکرد | سیستم کش فایل با invalidate برچسبی، صفحهبندی، بهینهسازی assets |
├── app/
│ ├── Controllers/ کنترلرهای برنامه
│ ├── Models/ مدلهای Active Record
│ ├── Services/ منطق کسبوکار (ZarinPal, SmsService, OrderEffects)
│ ├── Middleware/ اعتبارسنجی و احراز هویت
│ ├── views/ قالبهای PHP (داشبورد، فروشگاه، ادمین)
│ ├── bootstrap.php راهاندازی، هدرهای امنیتی، مدیریت خطا
│ ├── routes.php تعریف مسیرها
│ ├── helpers.php توابع کمکی سراسری
│ ├── Auth.php مدیریت احراز هویت
│ ├── Router.php مسیریاب اختصاصی
│ ├── Database.php کلاس PDO wrapper
│ ├── Cache.php سیستم کش فایل با برچسب
│ ├── Config.php مدیریت تنظیمات
│ ├── SEOService.php سئو، structured data و متا
│ └── StructuredData.php JSON-LD (سازمان، FAQ، مقاله و …)
├── public/ پوشه ریشه وب سرور
│ ├── index.php Front Controller
│ ├── .htaccess قوانین بازنویسی Apache
│ └── assets/ فایلهای CSS, JS, تصاویر
├── storage/ ذخیرهساز فایل، کش، session، لاگ
├── database/ schema.sql، seed.sql و اسکریپتهای آپدیت
├── tests/ تستهای PHPUnit
├── .github/workflows/ CI (PHPCS, PHPStan, PHPUnit, CodeQL, Lighthouse)
├── vendor/ وابستگیهای Composer
├── .env.example الگوی فایل تنظیمات محیطی
├── composer.json وابستگیهای PHP
└── composer.lock قفل نسخه وابستگیها
- PHP 8.1 یا بالاتر
- MySQL 8.0+
- Apache با
mod_rewriteفعال - Composer
آخرین نسخه را از بخش Releases گیتهاب دانلود کنید. پروژه با یک اسکریپت نصبدار ارائه نمیشود؛ دیتابیس را با اسکریپتهای database/ آماده کنید.
tar xzf mobaro-v1.1.15.tar.gz -d /public_html/
cd /public_html/
composer install --no-dev --optimize-autoloadercp .env.example .envفایل .env را ویرایش کنید:
| متغیر | توضیح |
|---|---|
APP_URL |
آدرس دامنه (مثلاً https://mobaro.ir) |
DB_HOST |
میزبان دیتابیس (معمولاً localhost) |
DB_NAME |
نام دیتابیس |
DB_USER |
نام کاربری دیتابیس |
DB_PASS |
رمز عبور دیتابیس |
ZARINPAL_MERCHANT_ID |
شناسه درگاه زرینپال |
ZARINPAL_SANDBOX |
true برای تست، false برای محیط واقعی |
دیتابیس MySQL خود را بسازید، سپس import کنید (schema.sql جداول و seed.sql دادههای پیشفرض را میسازد):
mysql -u USER -p DB_NAME < database/schema.sql
mysql -u USER -p DB_NAME < database/seed.sqlchmod -R 755 storage/
chmod 777 storage/logs/ storage/cache/ storage/sessions/
chmod -R 755 public/uploads/مستقیماً روی Apache قرار دهید — فایل .htaccess مسیرها را به public/ هدایت میکند؛ یا با سرور داخلی PHP در توسعه:
php -d variables_order=EGPCS -S 127.0.0.1:8080 -t publicنکته: برای کارکرد صحیح متغیرهای محیطی در سرور داخلی PHP، اجرا با
-d variables_order=EGPCSضروری است.
# نصب وابستگیهای توسعه
composer install
# اجرای lint (PHP_CodeSniffer PSR-12)
composer lint
# اصلاح خودکار lint
composer lint:fix
# اجرای آنالیز استاتیک (PHPStan)
composer analyse
# اجرای تستها
composer testتستها به دیتابیس وصل میشوند؛ محیط GitHub Actions دیتابیس MySQL را با database/schema.sql و database/seed.sql آماده میکند. برای اجرای محلی تستها ابتدا همان importها را روی دیتابیس خودتان انجام دهید.
تنظیمات درگاه از پنل مدیریت (تنظیمات ← پرداخت) انجام میشود و روی تنظیمات .env اولویت دارد:
- کد مرچنت: از پنل زرینپال (
تنظیمات ← درگاه پرداخت) کد مرچنت را در پنل ادمین ثبت کنید. میتوانید آن را در.envهم باZARINPAL_MERCHANT_IDقرار دهید. - حالت تست: برای توسعه، گزینه «حالت تست (Sandbox)» را فعال کنید. کد مرچنت تست:
10000000-0000-0000-0000-000000000000. - آدرس بازگشت (Callback): آدرس نمایشدادهشده در بخش «وضعیت اتصال» را در پنل زرینپال ثبت کنید. دامنه باید با دامنهی تأییدشده در زرینپال یکسان باشد (
APP_URLدر.env). - مبلغ به ریال: درگاه زرینپال مبلغ را به ریال دریافت میکند؛ سیستم بهصورت خودکار مبلغ تومان را ×۱۰ میکند.
- لاگ تراکنشها: تمام درخواستها، تأییدها و بازگشتها در جدول
payment_logsثبت و در پنل ادمین (تب «پرداخت») قابل مشاهده است.
توجه: برای فعالسازی درگاه واقعی، کد مرچنت رسمی، گواهی SSL معتبر و تأیید مدارک توسط زرینپال لازم است (معمولاً ۲۴ تا ۷۲ ساعت).
- تمام queryهای دیتابیس با Prepared Statements
- توکن CSRF روی تمام فرمها
- Rate Limiting روی نقاط لاگین و ثبتنام (با پاکسازی خودکار رکوردهای قدیمی)
- اعتبارسنجی و پالایش ورودیها
- جلوگیری از directory listing و اجرای PHP در پوشه آپلود
- session امن با HttpOnly, SameSite=Lax و تشخیص صحیح HTTPS پشت proxy (
X-Forwarded-Proto) - هدرهای امنیتی:
Content-Security-Policy،X-Frame-Options: DENY،X-Content-Type-Options: nosniff،Referrer-Policy،Strict-Transport-Security - لاگ مرکزی خطاها در
storage/logs/app.logبا تبدیل خطاها به پاسخ ۵۰۰ - تشخیص HTTPS فعال/غیرفعال و ریدایرکت خودکار به
httpsدر محیط واقعی
پروژه در GitHub Actions بهصورت خودکار بررسی میشود:
| Workflow | وظیفه |
|---|---|
| CI | PHPCS (PSR-12)، PHPStan و PHPUnit روی PHP 8.2 و 8.3 |
| Lighthouse CI | سنجش عملکرد و دسترسپذیری صفحات / و /shop + smoke test مسیرهای عمومی |
| CodeQL | آنالیز استاتیک JavaScript و GitHub Actions |
- پروژه را Fork کنید
- برنچ بسازید (
git checkout -b feature/amazing) - lint، آنالیز و تست را اجرا کنید (
composer lint && composer analyse && composer test) - Commit کنید (
git commit -m 'Add amazing feature') - Push کنید (
git push origin feature/amazing) - Pull Request باز کنید
این پروژه تحت مجوز MIT منتشر شده است — برای جزئیات بیشتر فایل LICENSE را ببینید.
نسخه جاری پروژه در فایل VERSION نگهداری میشود. هر آپدیت در پوشه deploy/ دارای اسکریپت و راهنمای جداگانه است.
موبارو — ساخته شده با ❤️ در ایران
© 2026 Mobaro. تمامی حقوق محفوظ است.
