आर्किटेक्चर
कोर लेआउट, अनुरोध जीवनचक्र और TubePress द्वारा अपनाई गई नो-फ्रेमवर्क परंपराएँ।
TubePress एक जानबूझकर सरल सॉफ़्टवेयर है। इसमें कोई फ्रेमवर्क, कोई dependency-injection कंटेनर और कोई build step नहीं है — केवल स्टैटिक क्लासेज़ का उपयोग करने वाला सुव्यवस्थित, आधुनिक PHP है। यह पेज बताता है कि सभी हिस्से एक साथ कैसे जुड़ते हैं ताकि आप आत्मविश्वास के साथ CMS को विस्तारित कर सकें और ठीक से जान सकें कि आपका कोड कहाँ है।
डिज़ाइन दर्शन
तीन विचार पूरे कोडबेस को आकार देते हैं:
- कोई फ्रेमवर्क नहीं। कस्टम स्टैटिक क्लासेज़ के साथ शुद्ध PHP। कोई Composer रनटाइम डिपेंडेंसी नहीं जो टूट सके और PHP के अलावा कुछ भी सीखने की ज़रूरत नहीं।
- एक निश्चित core, मुफ़्त add-ons। core अपडेट करने योग्य है और इसे कभी सीधे संपादित नहीं करना चाहिए। आप जो भी कस्टमाइज़ करते हैं वह themes, plugins या settings में रहता है।
- स्केल करने और सस्ती होस्टिंग पर काम करने के लिए बनाया गया। भारी काम को chunks में विभाजित किया जाता है, और एक built-in pseudo-cron का मतलब है कि कोई सिस्टम crontab आवश्यक नहीं है।
डायरेक्टरी लेआउट
रिपॉज़िटरी core (निश्चित, अपडेट योग्य) को add-ons (उपयोगकर्ताओं द्वारा इंस्टॉल और हटाए गए) से अलग करती है।
CORE — never modified by themes/plugins, replaced by updates
config/ App config, DB config, install marker
src/Core/ App, Database, Router, Pagination, CronManager,
and the managers (Seo, Transcode, Update, …)
src/Auth/ Auth, Gate (permissions)
src/Models/ Video, Category, Tag, Performer, Channel,
Comment, Page, User, Setting, Favorite, History
src/Admin/ Admin CRUD controllers
src/Front/ Public-facing controllers
src/Install/ InstallController, Migrator
src/Helpers/ Format, FileUpload, Sanitizer, Slug, SEO,
Player, RateLimiter, ImpressionTracker
src/Plugin/ HookSystem, PluginInterface, PluginManager
src/Theme/ ThemeManager, ThemeRenderer
sql/ Numbered migrations (001_…sql → 0xx_…sql)
templates/admin/ Admin panel templates (layout + partials)
templates/install/ Install wizard templates
public/ Web root — index.php, uploads/, symlinks
cron/ Optional CLI scripts for a system crontab
ADD-ONS — installable / removable by users
themes/ Theme directories (active: "simply")
plugins/ Plugin directories (agegate, backup, ctr)
lang/ Translation files (en, fr, de, es, ar, …)src/, config/, sql/ या templates/ के अंतर्गत कुछ भी एक अपडेट द्वारा ओवरराइट किया जा सकता है। अपने परिवर्तनों को एक theme या plugin में रखें ताकि वे बचे रहें।रिक्वेस्ट लाइफसाइकिल
हर रिक्वेस्ट उसी क्रम में public/index.php से होकर गुज़रती है:
- PHP version guard।
config/php-guard.phpपहले चलता है — एक parse-safe गेट जो आधुनिक syntax लोड होने से पहले असमर्थित PHP version पर boot रोकता है। - Bootstrap।
config/app.phpautoloading, session और core सेवाएँ सेट करता है। - इंस्टॉल जाँच। यदि
App::isInstalled()false है (कोईconfig/installed.phpनहीं), तो रिक्वेस्ट को इंस्टॉल विज़ार्ड पर रूट किया जाता है और कुछ और लोड नहीं होता। - Route रजिस्ट्रेशन। Admin, API और front controllers प्रत्येक स्टैटिक
::routes()मेथड के माध्यम से अपने routes रजिस्टर करते हैं। - Dispatch।
Router::dispatch()URL को मैच करता है और controller मेथड को कॉल करता है। - Render। Admin actions
templates/admin/*रेंडर करते हैं; front actionsThemeRenderer::render()के माध्यम से सक्रिय theme रेंडर करते हैं। - Post-render कार्य। Impressions flush होते हैं और
CronManager::run()किसी भी due tasks को fire करता है।
Front page routes (/{slug} स्टैटिक पेजों के लिए catch-all) अंत में रजिस्टर किए जाते हैं, इसलिए वे वास्तविक routes को कभी छाया नहीं देते।
Core की परंपराएँ
| अवधारणा | परंपरा |
|---|---|
| Controllers | AdminXxxController::routes() / FrontXxxController::routes() routes रजिस्टर करते हैं; methods रिक्वेस्ट हैंडल करते हैं। |
| Models | स्टैटिक methods: Video::find($id), Video::all($filters), Video::create($data)। |
| Database | Database::fetchOne(), fetchAll(), insert(), update(), delete(), count(), transaction()। |
| Router | Router::get(), Router::post(), Router::param('name'), Router::redirect()। |
| Admin templates | Router::render('admin/videos', […]) → templates/admin/videos.php (layout.php + एक _videos.php partial लोड करता है)। |
| Front templates | ThemeRenderer::render('home', […]) → सक्रिय theme template + इसका layout.php। |
| Migrations | sql/NNN_name.sql, इंस्टॉल और अपडेट के दौरान Migrator::run() द्वारा स्वचालित रूप से चलाया जाता है। |
| Hooks | HookSystem::doAction('event') और HookSystem::applyFilter('filter', $value)। |
वेब सर्वर समर्थन
TubePress दोनों Apache और Nginx पर चलता है:
- Apache —
.htaccessफ़ाइलें URL rewriting और डायरेक्टरी सुरक्षा संभालती हैं। - Nginx —
aliasdirectives assets सर्व करते हैं औरdeny allनियम संवेदनशील paths की सुरक्षा करते हैं। - Symlinks —
public/themes → ../../themesऔरpublic/templates → ../../templatestheme और admin assets को एक्सपोज़ करते हैं जबकि PHP सोर्स को web root के बाहर रखते हैं।
web root हमेशा public/ है। सब कुछ संवेदनशील — config/, src/, sql/, storage/ — इसके बाहर होता है और सर्वर स्तर पर अतिरिक्त रूप से ब्लॉक किया जाता है।
कहाँ कस्टमाइज़ करें
| आप चाहते हैं… | यहाँ करें… |
|---|---|
| लुक और लेआउट बदलें | एक theme (या बिना कोड के बदलाव के लिए Appearance settings) |
| कोई फीचर या इंटीग्रेशन जोड़ें | actions & filters का उपयोग करके एक plugin |
| बिना कोड के व्यवहार बदलें | Settings |
| शेड्यूल किया हुआ काम जोड़ें | CronManager, एक plugin से |
अगले कदम
अभी भी अटके हैं?
अपने डैशबोर्ड से टिकट खोलें और हमारी टीम आपकी मदद करेगी।