Skip to content

Routing & Middleware

Annotation di atas method controller ({Namespace}\{Module}\Controller, wajib di-discover lewat glob app/Modules/*/Controller.php):

php
/**
 * @routeGroup("/user")
 * @middleware("SessionAuth")
 */
class Controller extends BaseController
{
    /**
     * @routeGet("/")
     * @routePost("/")   // bisa lebih dari satu method-annotation per action
     */
    public function indexAction() { ... }
}
  • @route(["GET","POST"], "/path") — bentuk umum
  • @route{METHOD}("/path") — shorthand (@routeGet, @routePost, @routePut, @routePatch, @routeDelete, dst — nama method HTTP apa saja setelah "route")
  • @middleware("Nama", ...args) — bisa lebih dari satu per class/method (semuanya diterapkan, bukan cuma yang pertama)
  • Resolusi nama middleware: exact FQCN → App\Middleware\{Nama}App\Middlewares\{Nama}Core\Middleware\{Nama} (middleware bawaan package ini). App-level custom middleware dengan nama sama selalu menang.
  • Middleware global didaftarkan di app/config/config.php'middlewares' (array nama class, dieksekusi di semua route).

Katalog middleware bawaan

MiddlewareFungsiConfig
CsrfTolak POST/PUT/PATCH/DELETE tanpa token CSRF valid (form field atau header X-CSRF-TOKEN)
RateLimitBatasi request per IP per action, counter di dataCacheargs: (maxAttempts=60, decayMinutes=1)
CorsJawab preflight OPTIONS, tambah header Access-Control-Allow-*app/config/cors.php: allowedOrigins, allowedMethods, allowedHeaders, allowCredentials, maxAge
TrustProxyTerjemahkan X-Forwarded-* ke REMOTE_ADDR/HTTPShanya kalau peer ada di whitelist CIDRapp/config/trustproxy.php: proxies (array CIDR/IP)
SessionAuthGuard session-based login, redirect ke halaman login / 401 JSONapp/config/auth.php: modelClass, loginUrl
IamAuthGuard token Ed25519 IAM server internal (Core\Iam\Sdk)app/config/iam.php: publicKey, baseUrl, appId
CasdoorAuthGuard JWT Casdoor (aurora-sso) via JWKSapp/config/casdoor.php: issuer, audience, jwksUrl, algorithms, cacheTtl
OAuth2AuthGuard JWT generik OAuth2/OIDC (multi-provider: Keycloak/Auth0/Google/dst) via JWKS + OIDC discoveryapp/config/oauth2.php: default, providers.{key}.{issuer,clientId,audience,algorithms,cacheTtl,jwksUri?} — args: (provider = null)

Kernel::boot() sudah otomatis memanggil TrustProxy::beforeExecute() sekali di awal (lihat Getting started), jadi REMOTE_ADDR/HTTPS sudah benar untuk middleware/controller lain begitu request masuk — tidak perlu didaftarkan lagi di 'middlewares' global. Baris registrasi di bawah cuma relevan untuk app yang sengaja mau menjalankannya ulang di titik lain (harmless, jadi no-op kalau REMOTE_ADDR sudah bukan alamat proxy lagi):

php
'middlewares' => [
    \Core\Middleware\TrustProxy::class,
    \Core\Middleware\RateLimit::class,
],