Lewati ke konten
TubePress — gratis, self-hosted & aktif dikembangkan
Referensi pengembang

Routing

API Router TubePress: bagaimana rute front-end, admin dan API didaftarkan, dicocokkan dan dikirim, termasuk parameter rute dan metode HTTP.

TubePress menggunakan router kecil yang cepat yang dibangun di sekitar kelas statis Router. Controller mendaftarkan rute mereka dalam metode ::routes(), dan public/index.php memanggil metode-metode tersebut sebelum mengirimkan permintaan. Halaman ini mencakup semua yang Anda butuhkan untuk menambahkan rute dari plugin atau memahami cara permintaan dicocokkan.

Mendaftarkan rute

Daftarkan rute dengan Router::get() atau Router::post(). Handler dapat berupa callable apa pun — closure atau pasangan [Class, 'method'].

// Closure handler
Router::get('/promo', function () {
    ThemeRenderer::render('promo', ['deal' => 'Summer']);
});

// Controller handler
Router::post('/promo/claim', [PromoController::class, 'claim']);

Secara konvensi, setiap controller mengekspos metode statis routes() yang mendaftarkan semua rutenya, dan metode tersebut dipanggil sekali saat boot:

class PromoController
{
    public static function routes(): void
    {
        Router::get('/promo', [self::class, 'show']);
        Router::post('/promo/claim', [self::class, 'claim']);
    }
}

Parameter rute

Gunakan placeholder {name} dalam path; masing-masing cocok dengan satu segmen URL (semua kecuali /). Baca nilainya dengan Router::param().

Router::get('/promo/{code}', function () {
    $code = Router::param('code');          // required
    $ref  = Router::param('ref', 'direct'); // with a default
    // …
});

Secara internal, pola seperti /promo/{code} dikompilasi menjadi regex (?P<code>[^/]+), sehingga parameter tidak pernah melewati garis miring. Rute eksak dicocokkan terlebih dahulu, kemudian rute berparameter sesuai urutan pendaftaran.

Mengirimkan respons

MetodePenggunaan
ThemeRenderer::render($tpl, $data)Merender halaman front-end melalui tema yang aktif.
Router::render($tpl, $data)Merender template admin (templates/{$tpl}.php).
Router::json($data, $code = 200)Mengirimkan respons JSON dan keluar.
Router::redirect($url)Mengalihkan (dan keluar). URL front-end secara otomatis diberi awalan dengan bahasa/tipe yang aktif.

Urutan rute & catch-all

Halaman statis dilayani oleh catch-all /{slug}, sehingga controller halaman didaftarkan terakhir dalam public/index.php — setelah semua rute front, admin, dan API lainnya. Jika Anda mendaftarkan rute dari plugin saat boot, rute tersebut ditambahkan sebelum catch-all dan akan dicocokkan lebih dahulu.

Hindari konflik dengan slug halaman. Rute plugin seperti /deals akan menutupi halaman statis di /deals. Beri namespace pada rute plugin (misalnya /promo/deals) agar aman.

Perlindungan CSRF

Setiap POST yang mengubah state harus dilindungi CSRF. Router menyediakan helper berikut:

// In your form template
<?= Router::csrfField() ?>          // hidden input

// In your POST handler
if (!Router::verifyCsrf()) {
    Router::json(['error' => 'Invalid token'], 403);
}

verifyCsrf() menerima token dari field POST csrf_token atau header X-CSRF-Token, dan membandingkannya dengan hash_equals().

URL yang dilokalisasi & bertipe

Untuk situs multibahasa, router secara transparan menangani awalan bahasa (misalnya /fr/…) dan menerjemahkan slug rute yang dikenal, sehingga /categorie/brunette dipetakan ke rute category. Rute admin dan instal dikecualikan — daftarkan path dengan Router::addNoPrefixPath() jika Anda perlu mengecualikan path kustom dari pemberian awalan. Lihat Bahasa & terjemahan untuk perilaku lengkap. Helper Router::langPrefix(), Router::typePrefix(), dan Router::url() memungkinkan Anda membangun tautan yang benar dalam locale apa pun.

Langkah berikutnya

Masih kesulitan?

Buka tiket dari dasbor Anda dan tim kami akan membantu Anda.

Coba demo langsung → Unduh TubePress →