Abstract Controller class for RESTful controller mapping. Supports GET, PUT, POST, and DELETE. By default, these methods will be mapped to these actions:
Additional methods can be supported by adding the method and action to
the $_action_map
property.
Using this class within a website will require heavy modification, due to most web browsers only supporting the GET and POST methods. Generally, this class should only be used for web services and APIs.
Class declared in SYSPATH/classes/controller/rest.php on line 3.
Request
$requestRequest that created the controller
Response
$responseThe response that will be returned from controller
array
$_action_mapREST types
string
$_action_requestedrequested action
Sends a 405 "Method Not Allowed" response and a list of allowed actions.
public function action_invalid()
{
// Send the "Method Not Allowed" response
$this->response->status(405)
->headers('Allow', implode(', ', array_keys($this->_action_map)));
}
undocumented function
public function after()
{
if (in_array(Arr::get($_SERVER, 'HTTP_X_HTTP_METHOD_OVERRIDE', $this->request->method()), array(
HTTP_Request::PUT,
HTTP_Request::POST,
HTTP_Request::DELETE)))
{
$this->response->headers('cache-control', 'no-cache, no-store, max-age=0, must-revalidate');
}
}
Checks the requested method against the available methods. If the method is supported, sets the request action from the map. If not supported, the "invalid" action will be called.
public function before()
{
$this->_action_requested = $this->request->action();
$method = Arr::get($_SERVER, 'HTTP_X_HTTP_METHOD_OVERRIDE', $this->request->method());
if ( ! isset($this->_action_map[$method]))
{
$this->request->action('invalid');
}
else
{
$this->request->action($this->_action_map[$method]);
}
return parent::before();
}
Creates a new controller instance. Each controller must be constructed with the request object that created it.
Request
$request
required - Request that created the controllerResponse
$response
required - The request's responsevoid
public function __construct(Request $request, Response $response)
{
// Assign the request to the controller
$this->request = $request;
// Assign a response to the controller
$this->response = $response;
}