|
18 | 18 |
|
19 | 19 | final class MasterValidator { |
20 | 20 |
|
21 | | - public static function validate(object $target, OptionsModel $passedOptionsModel = null) { |
| 21 | + public static function validate(object $target, OptionsModel $passedOptionsModel = null, callable $callback = null, $forceCallback = false) { |
22 | 22 | $optionsModel = (empty($passedOptionsModel)) ? new OptionsModel() : $passedOptionsModel; |
| 23 | + if (count($optionsModel->getOrAttributes()) != count(array_unique($optionsModel->getOrAttributes()))) { |
| 24 | + throw new Exception("There is a duplicate OR attribute, the array of the OR attributes must be unique"); |
| 25 | + } |
23 | 26 | $className = get_class($target); |
24 | 27 | $reflectionClass = new ReflectionClass($className); |
25 | 28 | $methods = $reflectionClass->getMethods(); |
26 | 29 | $properties = $reflectionClass->getProperties(); |
27 | 30 | $constants = $reflectionClass->getConstants(); |
28 | | - foreach($optionsModel->getOrderOfValidation() as $order) { |
29 | | - switch($order) { |
30 | | - case ValidationOrderEnum::METHODS: |
31 | | - MasterValidator::validateMethods($methods, $className, $target, $optionsModel->getExcludedMethods(), $passedOptionsModel->getOrAttributes(), $passedOptionsModel->getGlobalSeverityLevel()); |
32 | | - break; |
33 | | - case ValidationOrderEnum::PROPERTIES: |
34 | | - MasterValidator::validateProperties($properties, $className, $target, $optionsModel->getExcludedProperties(), $passedOptionsModel->getOrAttributes(), $passedOptionsModel->getGlobalSeverityLevel()); |
35 | | - break; |
36 | | - case ValidationOrderEnum::CONSTANTS: |
37 | | - MasterValidator::validateConstants($constants, $className, $target, $optionsModel->getExcludedProperties(), $passedOptionsModel->getOrAttributes(), $passedOptionsModel->getGlobalSeverityLevel()); |
38 | | - break; |
39 | | - |
| 31 | + try { |
| 32 | + foreach($optionsModel->getOrderOfValidation() as $order) { |
| 33 | + switch($order) { |
| 34 | + case ValidationOrderEnum::METHODS: |
| 35 | + MasterValidator::validateMethods($methods, $className, $target, $optionsModel->getExcludedMethods(), $optionsModel->getOrAttributes(), $optionsModel->getGlobalSeverityLevel()); |
| 36 | + break; |
| 37 | + case ValidationOrderEnum::PROPERTIES: |
| 38 | + MasterValidator::validateProperties($properties, $className, $target, $optionsModel->getExcludedProperties(), $optionsModel->getOrAttributes(), $optionsModel->getGlobalSeverityLevel()); |
| 39 | + break; |
| 40 | + case ValidationOrderEnum::CONSTANTS: |
| 41 | + MasterValidator::validateConstants($constants, $className, $target, $optionsModel->getExcludedProperties(), $optionsModel->getOrAttributes(), $optionsModel->getGlobalSeverityLevel()); |
| 42 | + break; |
| 43 | + } |
| 44 | + } |
| 45 | + if (!$forceCallback && !is_null($callback)) { |
| 46 | + $callback(); |
| 47 | + } |
| 48 | + } |
| 49 | + catch(Exception $e) { |
| 50 | + throw $e; |
| 51 | + } |
| 52 | + finally { |
| 53 | + if ($forceCallback && !is_null($callback)) { |
| 54 | + $callback(); |
40 | 55 | } |
41 | 56 | } |
42 | 57 |
|
|
0 commit comments