Exemplo n.º 1
0
 /**
  * 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);
     }
 }
Exemplo n.º 2
0
 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}");
         }
     }
 }