Skip to content

Leaf 5 โ€” CORS Reference โ€‹

Installation โ€‹

bash
leaf install cors

MVC: works automatically after install. Basic/Lite: initialize manually before your routes:

php
app()->cors();
// ... routes follow

Configuration โ€‹

MVC โ€” via .env โ€‹

env
CORS_ALLOWED_ORIGINS='/\.example\.com$/'
CORS_ALLOWED_METHODS='GET,HEAD,PUT,PATCH,POST,DELETE'
CORS_ALLOWED_HEADERS='*'

For dynamic config (e.g. a function for origin), publish the config file:

bash
leaf config:publish cors
# โ†’ config/cors.php

Basic/Lite โ€” inline โ€‹

php
app()->cors([
    'origin'  => ['http://example.com', 'http://example.org'],
    'methods' => ['GET', 'POST'],
]);

All Options โ€‹

OptionTypeDescription
originString, RegExp, ArrayAccess-Control-Allow-Origin
methodsString or ArrayAccess-Control-Allow-Methods
allowedHeadersString or ArrayAccess-Control-Allow-Headers. Defaults to request's Access-Control-Request-Headers.
exposedHeadersString or ArrayAccess-Control-Expose-Headers
credentialsBooleanAccess-Control-Allow-Credentials
maxAgeIntegerAccess-Control-Max-Age
preflightContinueBooleanPass preflight to next handler
optionsSuccessStatusIntegerStatus for OPTIONS requests. Default 204; use 200 for IE11/SmartTV.

origin Examples โ€‹

php
'origin' => 'http://example.com'                          // exact match
'origin' => '/^https:\/\/(.*\.)?example\.com$/'          // regex, anchored so evil-example.com never matches
'origin' => ['http://example1.com', '/\.example2\.com$/'] // array: string + regex