@@ -31,6 +31,13 @@ abstract class REST_Controller extends CI_Controller
3131	 */ 
3232	protected  $ methods  = array ();
3333
34+ 	/** 
35+ 	 * List of allowed HTTP methods 
36+ 	 * 
37+ 	 * @var array 
38+ 	 */ 
39+ 	protected  $ allowed_http_methods  = array ('get ' , 'delete ' , 'post ' , 'put ' );
40+ 
3441	/** 
3542	 * General request data and information. 
3643	 * Stores accept, language, body, headers, etc. 
@@ -156,42 +163,7 @@ public function __construct()
156163		// Some Methods cant have a body 
157164		$ this  ->request ->body  = NULL ;
158165
159- 		switch  ($ this  ->request ->method )
160- 		{
161- 			case  'get ' :
162- 				// Grab proper GET variables 
163- 				parse_str (parse_url ($ _SERVER  ['REQUEST_URI ' ], PHP_URL_QUERY ), $ get );
164- 
165- 				// Merge both the URI segments and GET params 
166- 				$ this  ->_get_args  = array_merge ($ this  ->_get_args , $ get );
167- 				break ;
168- 
169- 			case  'post ' :
170- 				$ this  ->_post_args  = $ _POST  ;
171- 
172- 				$ this  ->request ->format  and  $ this  ->request ->body  = file_get_contents ('php://input ' );
173- 				break ;
174- 
175- 			case  'put ' :
176- 				// It might be a HTTP body 
177- 				if  ($ this  ->request ->format )
178- 				{
179- 					$ this  ->request ->body  = file_get_contents ('php://input ' );
180- 				}
181- 
182- 				// If no file type is provided, this is probably just arguments 
183- 				else 
184- 				{
185- 					parse_str (file_get_contents ('php://input ' ), $ this  ->_put_args );
186- 				}
187- 
188- 				break ;
189- 
190- 			case  'delete ' :
191- 				// Set up out DELETE variables (which shouldn't really exist, but sssh!) 
192- 				parse_str (file_get_contents ('php://input ' ), $ this  ->_delete_args );
193- 				break ;
194- 		}
166+ 		$ this  ->{'_parse_ '  . $ this  ->request ->method }();
195167
196168		// Now we know all about our request, let's try and parse the body if it exists 
197169		if  ($ this  ->request ->format  and  $ this  ->request ->body )
@@ -355,7 +327,7 @@ public function response($data = array(), $http_code = null)
355327		{
356328			$ http_code  = 404 ;
357329
358- 			//create the output variable here in the case of $this->response(array()); 
330+ 			//  create the output variable here in the case of $this->response(array()); 
359331			$ output  = NULL ;
360332		}
361333
@@ -527,7 +499,7 @@ protected function _detect_output_format()
527499	/** 
528500	 * Detect method 
529501	 * 
530- 	 * Detect which method (POST, PUT, GET, DELETE)  is being used 
502+ 	 * Detect which HTTP method  is being used 
531503	 * 
532504	 * @return string 
533505	 */ 
@@ -547,7 +519,7 @@ protected function _detect_method()
547519			}
548520		}
549521
550- 		if  (in_array ($ method , array ( ' get '  , 'delete '  ,  ' post ' ,  ' put ' ) ))
522+ 		if  (in_array ($ method , $ this -> allowed_http_methods ) &&  method_exists ( $ this  , '_parse_ '   .  $ method  ))
551523		{
552524			return  $ method ;
553525		}
@@ -768,6 +740,55 @@ protected function _auth_override_check()
768740		return  false ;
769741	}
770742
743+ 	/** 
744+ 	 * Parse GET 
745+ 	 */ 
746+ 	protected  function  _parse_get ()
747+ 	{
748+ 		// Grab proper GET variables 
749+ 		parse_str (parse_url ($ _SERVER  ['REQUEST_URI ' ], PHP_URL_QUERY ), $ get );
750+ 
751+ 		// Merge both the URI segments and GET params 
752+ 		$ this  ->_get_args  = array_merge ($ this  ->_get_args , $ get );
753+ 	}
754+ 
755+ 	/** 
756+ 	 * Parse POST 
757+ 	 */ 
758+ 	protected  function  _parse_post ()
759+ 	{
760+ 		$ this  ->_post_args  = $ _POST  ;
761+ 
762+ 		$ this  ->request ->format  and  $ this  ->request ->body  = file_get_contents ('php://input ' );
763+ 	}
764+ 
765+ 	/** 
766+ 	 * Parse PUT 
767+ 	 */ 
768+ 	protected  function  _parse_put ()
769+ 	{
770+ 		// It might be a HTTP body 
771+ 		if  ($ this  ->request ->format )
772+ 		{
773+ 			$ this  ->request ->body  = file_get_contents ('php://input ' );
774+ 		}
775+ 
776+ 		// If no file type is provided, this is probably just arguments 
777+ 		else 
778+ 		{
779+ 			parse_str (file_get_contents ('php://input ' ), $ this  ->_put_args );
780+ 		}
781+ 	}
782+ 
783+ 	/** 
784+ 	 * Parse DELETE 
785+ 	 */ 
786+ 	protected  function  _parse_delete ()
787+ 	{
788+ 		// Set up out DELETE variables (which shouldn't really exist, but sssh!) 
789+ 		parse_str (file_get_contents ('php://input ' ), $ this  ->_delete_args );
790+ 	}
791+ 
771792	// INPUT FUNCTION -------------------------------------------------------------- 
772793
773794	/** 
0 commit comments