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
|
// load libraries
|
||||||
require_once(DOKU_INC.'inc/load.php');
|
require_once(DOKU_INC.'inc/load.php');
|
||||||
|
|
||||||
|
// input handle class
|
||||||
|
global $INPUT;
|
||||||
|
$INPUT = new Input();
|
||||||
|
|
||||||
// initialize plugin controller
|
// initialize plugin controller
|
||||||
$plugin_controller = new $plugin_controller_class();
|
$plugin_controller = new $plugin_controller_class();
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,7 @@ function load_autoload($name){
|
||||||
'Doku_Event' => DOKU_INC.'inc/events.php',
|
'Doku_Event' => DOKU_INC.'inc/events.php',
|
||||||
'Doku_Event_Handler' => DOKU_INC.'inc/events.php',
|
'Doku_Event_Handler' => DOKU_INC.'inc/events.php',
|
||||||
'EmailAddressValidator' => DOKU_INC.'inc/EmailAddressValidator.php',
|
'EmailAddressValidator' => DOKU_INC.'inc/EmailAddressValidator.php',
|
||||||
|
'Input' => DOKU_INC.'inc/Input.class.php',
|
||||||
'JpegMeta' => DOKU_INC.'inc/JpegMeta.php',
|
'JpegMeta' => DOKU_INC.'inc/JpegMeta.php',
|
||||||
'SimplePie' => DOKU_INC.'inc/SimplePie.php',
|
'SimplePie' => DOKU_INC.'inc/SimplePie.php',
|
||||||
'FeedParser' => DOKU_INC.'inc/FeedParser.php',
|
'FeedParser' => DOKU_INC.'inc/FeedParser.php',
|
||||||
|
|
Loading…
Reference in New Issue