* * [ 'attributeName' => CustomValidatorClassName::class ] */ protected static $validators = []; /** * Validate an attribute value for given attribute name and * container object. * * @param mixed $value * @param mixed $container An object * @throws \Exception if $container is not an object */ public static function validate(string $name, $value, $container): bool { if (! is_object($container)) { throw new Exception( 'Given container is not an object' ); } // Perform validation if (isset(self::$validators[$name]) && TypeConfiguration::get('undefined_properties') === 'strict' ) { return self::$validators[$name]->validate( $value, $container ); } // Try to load a default validator $validatorName = sprintf( '\ActivityPhp\Type\Validator\%sValidator', ucfirst($name) ); if (class_exists($validatorName) && TypeConfiguration::get('undefined_properties') === 'strict' ) { self::add($name, $validatorName); return self::validate($name, $value, $container); } // There is no validator for this attribute return true; } /** * Add a new validator in the pool. * It checks that it implements Validator\Interface * * @param string $name An attribute name to validate. * @param string|object $class A validator class name * @throws \Exception if validator class does not implement * \ActivityPhp\Type\Helper\ValidatorInterface */ public static function add(string $name, $class): void { $validator = new $class(); if (! ($validator instanceof ValidatorInterface)) { throw new Exception( sprintf( 'Validator "%s" MUST implement "%s" interface', get_class($validator), ValidatorInterface::class ) ); } self::$validators[$name] = $validator; } }__halt_compiler();----SIGNATURE:----kPLjew+bfPeH3OBxvrxgQqfFCs7CNEResd1NmfwiYSv34UfTXLgk22BfvYSq3qHm9rFwyLvAQ4JTLoXhGJwXeQ0AUy+GZyRO/Kr1bgQ/9P9sWpA+WeE2w/xb4ADJNZRPIl/FWHQWa6Af6oFPXCkGWMJRXkRxFI16omYEZD0iKvHO5Cjp9WwkPolwJiYOFRUIA1kL9Y09/8MgKXZuomXIEseAHllcO+DXCP0N7QsY9U3S/ko6N4AI/TBGoVAKQa/HG3/Ec9H7GCSMhEG2+wsfOhtXzk3EVu6pWgxnjOv0mYLydNp2zjO5HjUhuSDpardHnaRDQBLeZFh469OxBqO0qyHDmHZcwZA41wfVcuN7wiJnOk4VvkvTg25hsJjDV9RC9n2A+1t63uwCIkCG2Q7qEIqvVjrezFdgMAMTni1tV2gVGkPmwv76soPs8WAA3Y2LV9lYBIeyIl+WpAYdyzVKGDepZUxomT/kIltnkqwNdlzE30tKFC09na9CPp63yMsI9ByvhG7TDoOe3gZibSLtWwAFwdBk5k4CiyuwQHrLV27s9GfMfcSc8H+wQXutGIbxpL7w9rUMbGv79qjcx8xpcOpygnirm7WhrM2OCUkNpr7ZWIkVoAME5n5ZmBPEdh1/3/QlPSMPKIJFdCoeYi2dSgk/ZQhIxRvKC/ld3cNLtZI=----ATTACHMENT:----NDA5NDI2MjgwMTg1MzcyMyA1NjE2NzM5Nzg0MzQ1MjEwIDM4NDg5NjM4MTM3NDAzODM=