/** * Validates and type-casts API Request parameters * * TODO 02/09/2009: Create more informative InvalidArgumentException classes: * InvalidInputException, MissingRequiredParameterException, etc. * * @param array &$expected Types of checks required for request * @param array &$input Actual request parameters * @param array &$optional Array to store optional parameters in * * @return void */ public static function checkInput(&$expected, &$input, &$optional) { // Validation checks $checks = array("required" => "checkForMissingParams", "alphanum" => "checkAlphaNumericStrings", "ints" => "checkInts", "floats" => "checkFloats", "bools" => "checkBools", "dates" => "checkDates", "encoded" => "checkURLEncodedStrings", "urls" => "checkURLs", "files" => "checkFilePaths", "uuids" => "checkUUIDs"); // Run validation checks foreach ($checks as $name => $method) { if (isset($expected[$name])) { Validation_InputValidator::$method($expected[$name], $input); } } // Create array of optional parameters if (isset($expected["optional"])) { Validation_InputValidator::checkOptionalParams($expected["optional"], $input, $optional); } // Check for unknown parameters $allowed = array("action", "_", "XDEBUG_PROFILE"); if (isset($expected["required"])) { $allowed = array_merge($allowed, array_values($expected["required"])); } if (isset($expected["optional"])) { $allowed = array_merge($allowed, array_values($expected["optional"])); } // Unset any unexpected request parameters foreach (array_keys($_REQUEST) as $param) { if (!in_array($param, $allowed)) { /* throw new InvalidArgumentException( 'Unrecognized parameter <b>'.$param.'</b>.', 27); */ unset($_REQUEST[$param]); unset($_GET[$param]); unset($_POST[$param]); } } }