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/kohana/controller/rest.php on line 31.
Request
$requestlink to thisRequest that created the controller
Response
$responselink to thisThe response that will be returned from controller
array
$_action_maplink to thisREST types
string
$_action_requestedlink to thisrequested 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
;
}