A simple plugin to add CORS headers to specified requests.
- CakePHP 3.0+
- PHP 5.4+
You can install this plugin into your CakePHP application using composer.
To install this plugin, in your terminal type:
composer require snelg/cakephp-cors
Define a single key within the routes array in the DispatcherFactory options array:
DispatcherFactory::add('Cors.Cors', ['routes' => [
'ControllerClassName'
]]);
Define a nested array consisting of 'controller' => 'action' within the routes array in DispatcherFactor options:
DispatcherFactory::add('Cors.Cors', ['routes' => [
'ControllerClassName' => 'some_action',
]]);
DispatcherFactory::add('Cors.Cors', ['routes' => [
'ControllerClassName' => [
'action_one' => ['origin' => 'somesite.com']
]]);
DispatcherFactory::add('Cors.Cors', ['routes' => [
'ControllerClassName' => [
'action_one' => [
'origin' => 'somesite.com',
'methods' => ['PUT', 'DELETE']
]
]]);
Router::scope('/', function($routes) {
$routes->connect('/public_api',
['controller' => 'ControllerClass', 'action' => 'action_one', 'cors' => true]]
});
}
Router::scope('/', function($routes) {
$routes->connect('/public_api', [
'controller' => 'ControllerClass',
'action' => 'action_one',
'cors' => [
'origin' => 'your_origin.com',
'methods' => ['PUT', 'DELETE'],
'headers' => []
]
]);
});
}
First, you should initate the Cors plugin in your controller like so:
class YourController extends AppController
{
public $components = [
'Cors.Cors'
];
}
Then, define which routes you would like to utilize Cors with with the enable()
method:
class YourController extends AppController
{
public function view ()
{
// Cors now enabled for this action!
}
public function initialize(Event $e)
{
$this->Cors->enable([
'actions' => [
'view' => [
'origin' => 'somesite.com',
'headers' => [],
'methods' => ['GET', 'POST']
],
]
]);
{
}
You can also set Cors headers for an entire controller using the wildcard signifier:
class YourController extends AppController
{
public function initialize(Event $e)
{
$this->Cors->enable([
'actions' => [
'*' => [
'origin' => 'somesite.com',
'headers' => [],
'methods' => ['GET', 'POST']
]
]
]);
}
}
You can define default behaviors like so. If you don't define the origin, headers, or method scoped to a particular action, then the default parameters will take their place.
class YourController extends AppController
{
public function initialize(Event $e)
{
$this->Cors->enable([
'actions' => ['*' => true],
'origin' => 'somesite.com',
'headers' => [],
'methods' => ['GET', 'POST'],
]);
}
}
For bugs and feature requests, please use the issues section of this repository.
To contribute to this plugin please follow a few basic rules.
- Contributions must follow the CakePHP coding standard.
- Unit tests are required.
Copyright 2015, Glen Sawyer and Wes King
Licensed under The MIT License Redistributions of files must retain the above copyright notice.