राउटिंग
TubePress राउटर API: फ्रंट-एंड, एडमिन और API रूट्स कैसे पंजीकृत, मिलान और डिस्पैच किए जाते हैं, जिसमें रूट पैरामीटर और HTTP मेथड शामिल हैं।
TubePress एक छोटे, तेज़ रूटर का उपयोग करता है जो स्टैटिक Router क्लास पर आधारित है। Controller अपने routes को ::routes() मेथड में रजिस्टर करते हैं, और public/index.php request भेजने से पहले उन मेथड्स को कॉल करता है। यह पेज वह सब कुछ कवर करता है जो आपको किसी plugin से routes जोड़ने या यह समझने के लिए चाहिए कि requests कैसे मिलान की जाती हैं।
Routes रजिस्टर करना
किसी route को Router::get() या Router::post() से रजिस्टर करें। handler कोई भी callable हो सकता है — एक closure या [Class, 'method'] जोड़ा।
// Closure handler
Router::get('/promo', function () {
ThemeRenderer::render('promo', ['deal' => 'Summer']);
});
// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);परंपरा के अनुसार प्रत्येक controller एक स्टैटिक routes() मेथड उजागर करता है जो उसके सभी routes रजिस्टर करता है, और वह मेथड boot पर एक बार कॉल किया जाता है:
class PromoController
{
public static function routes(): void
{
Router::get('/promo', [self::class, 'show']);
Router::post('/promo/claim', [self::class, 'claim']);
}
}Route पैरामीटर्स
path में {name} placeholders का उपयोग करें; प्रत्येक एक single URL segment से मिलान करता है (/ को छोड़कर सब कुछ)। मान को Router::param() से पढ़ें।
Router::get('/promo/{code}', function () {
$code = Router::param('code'); // required
$ref = Router::param('ref', 'direct'); // with a default
// …
});आंतरिक रूप से /promo/{code} जैसा एक पैटर्न regex (?P<code>[^/]+) में संकलित होता है, इसलिए parameters कभी भी slashes को पार नहीं करते। पहले exact routes मिलाए जाते हैं, फिर registration क्रम में parameterised वाले।
Response भेजना
| Method | उपयोग |
|---|---|
ThemeRenderer::render($tpl, $data) | सक्रिय theme के माध्यम से front-end page रेंडर करें। |
Router::render($tpl, $data) | एक admin template रेंडर करें (templates/{$tpl}.php)। |
Router::json($data, $code = 200) | JSON response भेजें और बाहर निकलें। |
Router::redirect($url) | Redirect करें (और बाहर निकलें)। Front-end URLs स्वचालित रूप से सक्रिय भाषा/type के साथ prefix होते हैं। |
Route क्रम & catch-all
Static pages एक /{slug} catch-all द्वारा serve की जाती हैं, इसलिए page controller को public/index.php में अंत में रजिस्टर किया जाता है — हर दूसरे front, admin और API route के बाद। यदि आप boot के दौरान plugin से routes रजिस्टर करते हैं, तो वे catch-all से पहले जोड़े जाते हैं और पहले मिलान करेंगे।
/deals जैसा plugin route /deals पर एक static page को छिपा देगा। सुरक्षित रहने के लिए plugin routes को namespace करें (उदाहरण के लिए /promo/deals)।CSRF सुरक्षा
हर state-changing POST को CSRF-protected होना चाहिए। router ये helpers प्रदान करता है:
// In your form template
<?= Router::csrfField() ?> // hidden input
// In your POST handler
if (!Router::verifyCsrf()) {
Router::json(['error' => 'Invalid token'], 403);
}verifyCsrf() csrf_token POST field या X-CSRF-Token header से token स्वीकार करता है, और उसे hash_equals() से तुलना करता है।
स्थानीयकृत & typed URLs
बहुभाषी sites के लिए router पारदर्शी रूप से एक language prefix (उदाहरण के लिए /fr/…) संभालता है और ज्ञात route slugs का अनुवाद करता है, इसलिए /categorie/brunette category route से मिलता है। Admin और install routes exempt हैं — यदि आपको किसी custom path को prefixing से बाहर करना है तो Router::addNoPrefixPath() से path रजिस्टर करें। पूर्ण व्यवहार के लिए Languages & translation देखें। Helpers Router::langPrefix(), Router::typePrefix() और Router::url() आपको किसी भी locale में सही links बनाने देते हैं।
अगले कदम
अभी भी अटके हैं?
अपने डैशबोर्ड से टिकट खोलें और हमारी टीम आपकी मदद करेगी।