resource_type == null) { throw new Exception("@todo ERROR_MISSING_RESOURCE_TYPE"); } parent::__construct(); } /** * Handle dispatching for all REST controllers. */ public function __call($function, $args) { // If no parameter was provided after the controller name (eg "/albums") then $function will // be set to "index". Otherwise, $function is the first parameter, and $args are all // subsequent parameters. $request_method = rest::request_method(); if ($function == "index" && $request_method == "get") { return $this->_index(); } $resource = ORM::factory($this->resource_type, (int)$function); if (!$resource->loaded && $request_method != "post") { return Kohana::show_404(); } if ($request_method != "get") { access::verify_csrf(); } switch ($request_method) { case "get": return $this->_show($resource); case "put": return $this->_update($resource); case "delete": return $this->_delete($resource); case "post": return $this->_create($resource); } } /* We're editing an existing item, load it from the database. */ public function form_edit($resource_id) { if ($this->resource_type == null) { throw new Exception("@todo ERROR_MISSING_RESOURCE_TYPE"); } // @todo this needs security checks $resource = ORM::factory($this->resource_type, $resource_id); if (!$resource->loaded) { return Kohana::show_404(); } return $this->_form_edit($resource); } /* We're adding a new item, pass along any additional parameters. */ public function form_add($parameters) { return $this->_form_add($parameters); } /** * Perform a GET request on the controller root * (e.g. http://www.example.com/gallery3/comments) */ public function _index() { throw new Exception("@todo _create NOT IMPLEMENTED"); } /** * Perform a POST request on this resource * @param ORM $resource the instance of this resource type */ public function _create($resource) { throw new Exception("@todo _create NOT IMPLEMENTED"); } /** * Perform a GET request on this resource * @param ORM $resource the instance of this resource type */ public function _show($resource) { throw new Exception("@todo _show NOT IMPLEMENTED"); } /** * Perform a PUT request on this resource * @param ORM $resource the instance of this resource type */ public function _update($resource) { throw new Exception("@todo _update NOT IMPLEMENTED"); } /** * Perform a DELETE request on this resource * @param ORM $resource the instance of this resource type */ public function _delete($resource) { throw new Exception("@todo _delete NOT IMPLEMENTED"); } /** * Present a form for adding a new resource * @param string part of the URI after the controller name */ public function _form_add($parameter) { throw new Exception("@todo _form_add NOT IMPLEMENTED"); } /** * Present a form for editing an existing resource * @param ORM $resource the resource container for instances of this resource type */ public function _form_edit($resource) { throw new Exception("@todo _form_edit NOT IMPLEMENTED"); } }