diff --git a/wire/core/WireInput.php b/wire/core/WireInput.php index c7dade70..b06991bc 100644 --- a/wire/core/WireInput.php +++ b/wire/core/WireInput.php @@ -989,7 +989,8 @@ class WireInput extends Wire { /** @var Sanitizer $sanitizer */ $sanitizer = $this->wire('sanitizer'); - $values = is_array($value) ? $value : ($value === null ? array() : array($value)); + //$values = is_array($value) ? $value : ($value === null ? array() : array($value)); + $values = is_array($value) ? $value : array($value); $methods = strpos($method, ',') === false ? array($method) : explode(',', $method); $cleanValues = array(); @@ -997,10 +998,8 @@ class WireInput extends Wire { foreach($methods as $method) { $method = trim($method); if(empty($method)) continue; - if(method_exists($sanitizer, $method)) { - $value = call_user_func_array(array($sanitizer, $method), array($value)); - } else if(method_exists($sanitizer, "___$method")) { - $value = call_user_func_array(array($sanitizer, "___$method"), array($value)); + if($sanitizer->methodExists($method)) { + $value = $sanitizer->sanitize($value, $method); } else { throw new WireException("Unknown sanitizer method: $method"); } diff --git a/wire/core/WireInputData.php b/wire/core/WireInputData.php index 3135a76e..3171ef94 100644 --- a/wire/core/WireInputData.php +++ b/wire/core/WireInputData.php @@ -285,25 +285,30 @@ class WireInputData extends Wire implements \ArrayAccess, \IteratorAggregate, \C * @throws WireException * */ - public function __call($method, $arguments) { + public function ___callUnknown($method, $arguments) { $sanitizer = $this->wire('sanitizer'); - $method = ltrim($method, '_'); - if(!method_exists($sanitizer, $method)) { - $method = "___$method"; - if(!method_exists($sanitizer, $method)) { - $method = ltrim($method, "_"); - throw new WireException("Unknown method '$method' - Specify a valid Sanitizer or WireInputData method."); + if(!$sanitizer->methodExists($method)) { + try { + return parent::___callUnknown($method, $arguments); + } catch(\Exception $e) { + throw new WireException("Unknown method '$method' - specify a valid Sanitizer name or WireInputData method"); } } if(!isset($arguments[0])) { throw new WireException("For method '$method' specify an input variable name for first argument"); } + // swap input name with input value in arguments array $arguments[0] = $this->__get($arguments[0]); - if(is_null($arguments[0])) { - // value is not present in input at all - // @todo do you want to provide an alternate means of handling this situation? + if($arguments[0] === null) { + // value is not present in input at all, accommodate potential fallback value? + } + if(count($arguments) > 1) { + // more than one argument to sanitizer method + return call_user_func_array(array($sanitizer, $method), $arguments); + } else { + // single argument, pass along to sanitize method + return $sanitizer->sanitize($arguments[0], $method); } - return call_user_func_array(array($sanitizer, $method), $arguments); } }