/** * 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, $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); } }
public function request_method_test() { foreach (array("GET", "POST") as $method) { foreach (array("", "PUT", "DELETE") as $tunnel) { if ($method == "GET") { $expected = "GET"; } else { $expected = $tunnel == "" ? $method : $tunnel; } $_SERVER["REQUEST_METHOD"] = $method; $_POST["_method"] = $tunnel; $this->assert_equal(strtolower(rest::request_method()), strtolower($expected), "Request method: {$method}, tunneled: {$tunnel}"); } } }