Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introducing a $_REQUEST/POST/GET wrapper
This new wrapper ensures types are correct and accessed parameters are actually set (with custom default fallbacks). The wrapper is available in the global $INPUT variable. It accesses $_REQUEST by default. If POST or GET is required, the post and get members can be used: $INPUT->int('foo',false); // access $_REQUEST['foo'], default false $INPUT->post->int('foo'); // access $_POST['foo'], default 0 $INPUT->get->int('foo'); // access $_GET['foo'], default 0 The codebase still needs to be updated to make use of this.
- Loading branch information
1 parent
3791b58
commit 8917730
Showing
3 changed files
with
152 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
<?php | ||
|
||
/** | ||
* Encapsulates access to the $_REQUEST array, making sure used parameters are initialized and | ||
* have the correct type. | ||
* | ||
* All function access the $_REQUEST array by default, if you want to access $_POST or $_GET | ||
* explicitly use the $post and $get members. | ||
* | ||
* @author Andreas Gohr <andi@splitbrain.org> | ||
*/ | ||
class Input { | ||
|
||
/** @var PostInput Access $_POST parameters */ | ||
public $post; | ||
/** @var GetInput Access $_GET parameters */ | ||
public $get; | ||
|
||
protected $access; | ||
|
||
/** | ||
* Intilizes the Input class and it subcomponents | ||
*/ | ||
function __construct() { | ||
$this->access = &$_REQUEST; | ||
$this->post = new PostInput(); | ||
$this->get = new GetInput(); | ||
} | ||
|
||
/** | ||
* Access a request parameter without any type conversion | ||
* | ||
* @param string $name Parameter name | ||
* @param mixed $default Default to return if parameter isn't set | ||
* @return mixed | ||
*/ | ||
public function param($name, $default = null) { | ||
if(!isset($this->access[$name])) return $default; | ||
return $this->access[$name]; | ||
} | ||
|
||
/** | ||
* Get a reference to a request parameter | ||
* | ||
* This avoids copying data in memory, when the parameter is not set it will be created | ||
* and intialized with the given $default value before a reference is returned | ||
* | ||
* @param string $name Parameter name | ||
* @param mixed $default Initialize parameter with if not set | ||
* @return &mixed | ||
*/ | ||
public function &ref($name, $default = '') { | ||
if(!isset($this->access[$name])) { | ||
$this->access[$name] = $default; | ||
} | ||
|
||
$ref = &$this->access[$name]; | ||
return $ref; | ||
} | ||
|
||
/** | ||
* Access a request parameter as int | ||
* | ||
* @param string $name Parameter name | ||
* @param mixed $default Default to return if parameter isn't set or is an array | ||
* @return int | ||
*/ | ||
public function int($name, $default = 0) { | ||
if(!isset($this->access[$name])) return $default; | ||
if(is_array($this->access[$name])) return $default; | ||
|
||
return (int) $this->access[$name]; | ||
} | ||
|
||
/** | ||
* Access a request parameter as string | ||
* | ||
* @param string $name Parameter name | ||
* @param mixed $default Default to return if parameter isn't set or is an array | ||
* @return string | ||
*/ | ||
public function str($name, $default = '') { | ||
if(!isset($this->access[$name])) return $default; | ||
if(is_array($this->access[$name])) return $default; | ||
|
||
return (string) $this->access[$name]; | ||
} | ||
|
||
/** | ||
* Access a request parameter as bool | ||
* | ||
* @param string $name Parameter name | ||
* @param mixed $default Default to return if parameter isn't set | ||
* @return bool | ||
*/ | ||
public function bool($name, $default = '') { | ||
if(!isset($this->access[$name])) return $default; | ||
|
||
return (bool) $this->access[$name]; | ||
} | ||
|
||
/** | ||
* Access a request parameter as array | ||
* | ||
* @param string $name Parameter name | ||
* @param mixed $default Default to return if parameter isn't set | ||
* @return array | ||
*/ | ||
public function arr($name, $default = array()) { | ||
if(!isset($this->access[$name])) return $default; | ||
|
||
return (array) $this->access[$name]; | ||
} | ||
|
||
} | ||
|
||
/** | ||
* Internal class used for $_POST access in Input class | ||
*/ | ||
class PostInput extends Input { | ||
protected $access; | ||
|
||
/** | ||
* Initialize the $access array, remove subclass members | ||
*/ | ||
function __construct() { | ||
$this->access = &$_POST; | ||
unset ($this->post); | ||
unset ($this->get); | ||
} | ||
} | ||
|
||
/** | ||
* Internal class used for $_GET access in Input class | ||
*/ | ||
class GetInput extends Input { | ||
protected $access; | ||
|
||
/** | ||
* Initialize the $access array, remove subclass members | ||
*/ | ||
function __construct() { | ||
$this->access = &$_GET; | ||
unset ($this->post); | ||
unset ($this->get); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters