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.
This commit is contained in:
parent
3791b5891b
commit
89177306a2
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -197,6 +197,10 @@ if (empty($plugin_controller_class)) $plugin_controller_class = 'Doku_Plugin_Con
|
|||
// load libraries
|
||||
require_once(DOKU_INC.'inc/load.php');
|
||||
|
||||
// input handle class
|
||||
global $INPUT;
|
||||
$INPUT = new Input();
|
||||
|
||||
// initialize plugin controller
|
||||
$plugin_controller = new $plugin_controller_class();
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ function load_autoload($name){
|
|||
'Doku_Event' => DOKU_INC.'inc/events.php',
|
||||
'Doku_Event_Handler' => DOKU_INC.'inc/events.php',
|
||||
'EmailAddressValidator' => DOKU_INC.'inc/EmailAddressValidator.php',
|
||||
'Input' => DOKU_INC.'inc/Input.class.php',
|
||||
'JpegMeta' => DOKU_INC.'inc/JpegMeta.php',
|
||||
'SimplePie' => DOKU_INC.'inc/SimplePie.php',
|
||||
'FeedParser' => DOKU_INC.'inc/FeedParser.php',
|
||||
|
|
Loading…
Reference in New Issue