๐ CORS middleware for phputil/router
- Unit-tested โ
- Well-documented ๐
- Syntax compatible with expressjs/cors ๐ฏ
Requires phputil/router v0.2.14+
composer require phputil/cors
require_once 'vendor/autoload.php';
use phputil\router\Router;
use function phputil\cors\cors; // Step 1: Declare the namespace usage for the function.
$app = new Router();
$app->use( cors() ); // Step 2: Invoke the function to use it as a middleware.
$app->get( '/', function( $req, $res ) {
$res->send( 'Hello' );
} );
$app->listen();
function cors( array|CorOptions $options ): callable;
$options
can be an array or an object from the class CorOptions
. All its keys/attributes are optional:
- Configures the response header
Access-Control-Allow-Origin
, which indicates the allowed origin. - Allowed types:
bool
,string
,array
. true
, the default value, reflects theOrigin
request header - that is, it allows any origin.false
makes it to return'*'
as the header value.- A non-empty
string
value (e.g.'mydomain.com'
) restricts theOrigin
to the defined value. - A non-empty
array
value indicates thatOrigin
values are allowed. - When the
Origin
request header is not sent and the optionorigin
istrue
, it will return*
- aiming to accept any origin. Other options will block the request. - Using
*
may not work when using credentials or using httpS. Prefer sending the request headerOrigin
whenever possible.
Note: The returned status code for an origin that is not in the configured list is 403
(Forbidden).
- Configures the response header
Access-Control-Allow-Credentials
. - Allowed types:
bool
. true
, the default value, makes it to include the header.false
makes it to omit the header.- This header is important if your application uses cookies or some kind of authentication header.
- Configures the response header
Access-Control-Allow-Methods
. - Allowed types:
string
,array
. - The default value is
GET,HEAD,OPTIONS,POST,PUT,DELETE,PATCH
when the request headerAccess-Control-Request-Method
is not defined. - When the request header
Access-Control-Request-Method
is defined, the response headerAccess-Control-Allow-Methods
will return the received method, unless the optionmethods
is defined. - HTTP methods in a
string
must be separated by comma.
- Configures the response header
Access-Control-Allow-Headers
. - Allowed types:
string
,array
. - The default value is
'*'
, meaning to accept any request header. - HTTP headers in a
string
must be separated by comma.
- Configures the response header
Access-Control-Expose-Headers
. - Allowed types:
string
,array
. - The default value is
''
(empty string), meaning to not include the header. - HTTP headers in a
string
must be separated by comma.
- Configures the response header
Access-Control-Max-Age
. - Allowed types:
int
,null
. - The default value is
null
, meaning to not include the header. - An
int
value means the number of seconds that a preflight request can be cached (by the browser).
Using an array:
$options = [
'origin' => 'mydomain.com',
'methods' => 'GET,POST'
];
$app->use( cors( $options ) );
Using the class CorOptions
, that has nestable builder methods with the prefix with
:
use phputil\cors\CorsOptions; // Needed
$options = ( new CorsOptions() )
->withOrigin( 'mydomain.com' )
->withMethods( 'GET,POST' );
$app->use( cors( $options ) );