I18nValidator\Alnum::class, 'Alnum' => I18nValidator\Alnum::class, 'alpha' => I18nValidator\Alpha::class, 'Alpha' => I18nValidator\Alpha::class, 'barcode' => Barcode::class, 'Barcode' => Barcode::class, 'between' => Between::class, 'Between' => Between::class, 'bitwise' => Bitwise::class, 'Bitwise' => Bitwise::class, 'callback' => Callback::class, 'Callback' => Callback::class, 'creditcard' => CreditCard::class, 'creditCard' => CreditCard::class, 'CreditCard' => CreditCard::class, 'csrf' => Csrf::class, 'Csrf' => Csrf::class, 'date' => Date::class, 'Date' => Date::class, 'datestep' => DateStep::class, 'dateStep' => DateStep::class, 'DateStep' => DateStep::class, 'datetime' => I18nValidator\DateTime::class, 'dateTime' => I18nValidator\DateTime::class, 'DateTime' => I18nValidator\DateTime::class, 'dbnorecordexists' => Db\NoRecordExists::class, 'dbNoRecordExists' => Db\NoRecordExists::class, 'DbNoRecordExists' => Db\NoRecordExists::class, 'dbrecordexists' => Db\RecordExists::class, 'dbRecordExists' => Db\RecordExists::class, 'DbRecordExists' => Db\RecordExists::class, 'digits' => Digits::class, 'Digits' => Digits::class, 'emailaddress' => EmailAddress::class, 'emailAddress' => EmailAddress::class, 'EmailAddress' => EmailAddress::class, 'explode' => Explode::class, 'Explode' => Explode::class, 'filecount' => File\Count::class, 'fileCount' => File\Count::class, 'FileCount' => File\Count::class, 'filecrc32' => File\Crc32::class, 'fileCrc32' => File\Crc32::class, 'FileCrc32' => File\Crc32::class, 'fileexcludeextension' => File\ExcludeExtension::class, 'fileExcludeExtension' => File\ExcludeExtension::class, 'FileExcludeExtension' => File\ExcludeExtension::class, 'fileexcludemimetype' => File\ExcludeMimeType::class, 'fileExcludeMimeType' => File\ExcludeMimeType::class, 'FileExcludeMimeType' => File\ExcludeMimeType::class, 'fileexists' => File\Exists::class, 'fileExists' => File\Exists::class, 'FileExists' => File\Exists::class, 'fileextension' => File\Extension::class, 'fileExtension' => File\Extension::class, 'FileExtension' => File\Extension::class, 'filefilessize' => File\FilesSize::class, 'fileFilesSize' => File\FilesSize::class, 'FileFilesSize' => File\FilesSize::class, 'filehash' => File\Hash::class, 'fileHash' => File\Hash::class, 'FileHash' => File\Hash::class, 'fileimagesize' => File\ImageSize::class, 'fileImageSize' => File\ImageSize::class, 'FileImageSize' => File\ImageSize::class, 'fileiscompressed' => File\IsCompressed::class, 'fileIsCompressed' => File\IsCompressed::class, 'FileIsCompressed' => File\IsCompressed::class, 'fileisimage' => File\IsImage::class, 'fileIsImage' => File\IsImage::class, 'FileIsImage' => File\IsImage::class, 'filemd5' => File\Md5::class, 'fileMd5' => File\Md5::class, 'FileMd5' => File\Md5::class, 'filemimetype' => File\MimeType::class, 'fileMimeType' => File\MimeType::class, 'FileMimeType' => File\MimeType::class, 'filenotexists' => File\NotExists::class, 'fileNotExists' => File\NotExists::class, 'FileNotExists' => File\NotExists::class, 'filesha1' => File\Sha1::class, 'fileSha1' => File\Sha1::class, 'FileSha1' => File\Sha1::class, 'filesize' => File\Size::class, 'fileSize' => File\Size::class, 'FileSize' => File\Size::class, 'fileupload' => File\Upload::class, 'fileUpload' => File\Upload::class, 'FileUpload' => File\Upload::class, 'fileuploadfile' => File\UploadFile::class, 'fileUploadFile' => File\UploadFile::class, 'FileUploadFile' => File\UploadFile::class, 'filewordcount' => File\WordCount::class, 'fileWordCount' => File\WordCount::class, 'FileWordCount' => File\WordCount::class, 'float' => I18nValidator\IsFloat::class, 'Float' => I18nValidator\IsFloat::class, 'gpspoint' => GpsPoint::class, 'gpsPoint' => GpsPoint::class, 'GpsPoint' => GpsPoint::class, 'greaterthan' => GreaterThan::class, 'greaterThan' => GreaterThan::class, 'GreaterThan' => GreaterThan::class, 'hex' => Hex::class, 'Hex' => Hex::class, 'hostname' => Hostname::class, 'Hostname' => Hostname::class, 'iban' => Iban::class, 'Iban' => Iban::class, 'identical' => Identical::class, 'Identical' => Identical::class, 'inarray' => InArray::class, 'inArray' => InArray::class, 'InArray' => InArray::class, 'int' => I18nValidator\IsInt::class, 'Int' => I18nValidator\IsInt::class, 'ip' => Ip::class, 'Ip' => Ip::class, 'isbn' => Isbn::class, 'Isbn' => Isbn::class, 'isfloat' => I18nValidator\IsFloat::class, 'isFloat' => I18nValidator\IsFloat::class, 'IsFloat' => I18nValidator\IsFloat::class, 'isinstanceof' => IsInstanceOf::class, 'isInstanceOf' => IsInstanceOf::class, 'IsInstanceOf' => IsInstanceOf::class, 'isint' => I18nValidator\IsInt::class, 'isInt' => I18nValidator\IsInt::class, 'IsInt' => I18nValidator\IsInt::class, 'lessthan' => LessThan::class, 'lessThan' => LessThan::class, 'LessThan' => LessThan::class, 'notempty' => NotEmpty::class, 'notEmpty' => NotEmpty::class, 'NotEmpty' => NotEmpty::class, 'phonenumber' => I18nValidator\PhoneNumber::class, 'phoneNumber' => I18nValidator\PhoneNumber::class, 'PhoneNumber' => I18nValidator\PhoneNumber::class, 'postcode' => I18nValidator\PostCode::class, 'postCode' => I18nValidator\PostCode::class, 'PostCode' => I18nValidator\PostCode::class, 'regex' => Regex::class, 'Regex' => Regex::class, 'sitemapchangefreq' => Sitemap\Changefreq::class, 'sitemapChangefreq' => Sitemap\Changefreq::class, 'SitemapChangefreq' => Sitemap\Changefreq::class, 'sitemaplastmod' => Sitemap\Lastmod::class, 'sitemapLastmod' => Sitemap\Lastmod::class, 'SitemapLastmod' => Sitemap\Lastmod::class, 'sitemaploc' => Sitemap\Loc::class, 'sitemapLoc' => Sitemap\Loc::class, 'SitemapLoc' => Sitemap\Loc::class, 'sitemappriority' => Sitemap\Priority::class, 'sitemapPriority' => Sitemap\Priority::class, 'SitemapPriority' => Sitemap\Priority::class, 'stringlength' => StringLength::class, 'stringLength' => StringLength::class, 'StringLength' => StringLength::class, 'step' => Step::class, 'Step' => Step::class, 'timezone' => Timezone::class, 'Timezone' => Timezone::class, 'uri' => Uri::class, 'Uri' => Uri::class, 'uuid' => Uuid::class, 'Uuid' => Uuid::class, ]; /** * Default set of factories * * @var array */ protected $factories = [ I18nValidator\Alnum::class => InvokableFactory::class, I18nValidator\Alpha::class => InvokableFactory::class, Barcode::class => InvokableFactory::class, Between::class => InvokableFactory::class, Bitwise::class => InvokableFactory::class, Callback::class => InvokableFactory::class, CreditCard::class => InvokableFactory::class, Csrf::class => InvokableFactory::class, DateStep::class => InvokableFactory::class, Date::class => InvokableFactory::class, I18nValidator\DateTime::class => InvokableFactory::class, Db\NoRecordExists::class => InvokableFactory::class, Db\RecordExists::class => InvokableFactory::class, Digits::class => InvokableFactory::class, EmailAddress::class => InvokableFactory::class, Explode::class => InvokableFactory::class, File\Count::class => InvokableFactory::class, File\Crc32::class => InvokableFactory::class, File\ExcludeExtension::class => InvokableFactory::class, File\ExcludeMimeType::class => InvokableFactory::class, File\Exists::class => InvokableFactory::class, File\Extension::class => InvokableFactory::class, File\FilesSize::class => InvokableFactory::class, File\Hash::class => InvokableFactory::class, File\ImageSize::class => InvokableFactory::class, File\IsCompressed::class => InvokableFactory::class, File\IsImage::class => InvokableFactory::class, File\Md5::class => InvokableFactory::class, File\MimeType::class => InvokableFactory::class, File\NotExists::class => InvokableFactory::class, File\Sha1::class => InvokableFactory::class, File\Size::class => InvokableFactory::class, File\Upload::class => InvokableFactory::class, File\UploadFile::class => InvokableFactory::class, File\WordCount::class => InvokableFactory::class, I18nValidator\IsFloat::class => InvokableFactory::class, GpsPoint::class => InvokableFactory::class, GreaterThan::class => InvokableFactory::class, Hex::class => InvokableFactory::class, Hostname::class => InvokableFactory::class, Iban::class => InvokableFactory::class, Identical::class => InvokableFactory::class, InArray::class => InvokableFactory::class, I18nValidator\IsInt::class => InvokableFactory::class, Ip::class => InvokableFactory::class, Isbn::class => InvokableFactory::class, I18nValidator\IsFloat::class => InvokableFactory::class, IsInstanceOf::class => InvokableFactory::class, I18nValidator\IsInt::class => InvokableFactory::class, LessThan::class => InvokableFactory::class, NotEmpty::class => InvokableFactory::class, I18nValidator\PhoneNumber::class => InvokableFactory::class, I18nValidator\PostCode::class => InvokableFactory::class, Regex::class => InvokableFactory::class, Sitemap\Changefreq::class => InvokableFactory::class, Sitemap\Lastmod::class => InvokableFactory::class, Sitemap\Loc::class => InvokableFactory::class, Sitemap\Priority::class => InvokableFactory::class, StringLength::class => InvokableFactory::class, Step::class => InvokableFactory::class, Timezone::class => InvokableFactory::class, Uri::class => InvokableFactory::class, Uuid::class => InvokableFactory::class, // v2 canonical FQCNs 'zendvalidatorbarcodecode25interleaved' => InvokableFactory::class, 'zendvalidatorbarcodecode25' => InvokableFactory::class, 'zendvalidatorbarcodecode39ext' => InvokableFactory::class, 'zendvalidatorbarcodecode39' => InvokableFactory::class, 'zendvalidatorbarcodecode93ext' => InvokableFactory::class, 'zendvalidatorbarcodecode93' => InvokableFactory::class, 'zendvalidatorbarcodeean12' => InvokableFactory::class, 'zendvalidatorbarcodeean13' => InvokableFactory::class, 'zendvalidatorbarcodeean14' => InvokableFactory::class, 'zendvalidatorbarcodeean18' => InvokableFactory::class, 'zendvalidatorbarcodeean2' => InvokableFactory::class, 'zendvalidatorbarcodeean5' => InvokableFactory::class, 'zendvalidatorbarcodeean8' => InvokableFactory::class, 'zendvalidatorbarcodegtin12' => InvokableFactory::class, 'zendvalidatorbarcodegtin13' => InvokableFactory::class, 'zendvalidatorbarcodegtin14' => InvokableFactory::class, 'zendvalidatorbarcodeidentcode' => InvokableFactory::class, 'zendvalidatorbarcodeintelligentmail' => InvokableFactory::class, 'zendvalidatorbarcodeissn' => InvokableFactory::class, 'zendvalidatorbarcodeitf14' => InvokableFactory::class, 'zendvalidatorbarcodeleitcode' => InvokableFactory::class, 'zendvalidatorbarcodeplanet' => InvokableFactory::class, 'zendvalidatorbarcodepostnet' => InvokableFactory::class, 'zendvalidatorbarcoderoyalmail' => InvokableFactory::class, 'zendvalidatorbarcodesscc' => InvokableFactory::class, 'zendvalidatorbarcodeupca' => InvokableFactory::class, 'zendvalidatorbarcodeupce' => InvokableFactory::class, 'zendvalidatorbarcode' => InvokableFactory::class, 'zendvalidatorbetween' => InvokableFactory::class, 'zendvalidatorbitwise' => InvokableFactory::class, 'zendvalidatorcallback' => InvokableFactory::class, 'zendvalidatorcreditcard' => InvokableFactory::class, 'zendvalidatorcsrf' => InvokableFactory::class, 'zendvalidatordatestep' => InvokableFactory::class, 'zendvalidatordate' => InvokableFactory::class, 'zendvalidatordbnorecordexists' => InvokableFactory::class, 'zendvalidatordbrecordexists' => InvokableFactory::class, 'zendvalidatordigits' => InvokableFactory::class, 'zendvalidatoremailaddress' => InvokableFactory::class, 'zendvalidatorexplode' => InvokableFactory::class, 'zendvalidatorfilecount' => InvokableFactory::class, 'zendvalidatorfilecrc32' => InvokableFactory::class, 'zendvalidatorfileexcludeextension' => InvokableFactory::class, 'zendvalidatorfileexcludemimetype' => InvokableFactory::class, 'zendvalidatorfileexists' => InvokableFactory::class, 'zendvalidatorfileextension' => InvokableFactory::class, 'zendvalidatorfilefilessize' => InvokableFactory::class, 'zendvalidatorfilehash' => InvokableFactory::class, 'zendvalidatorfileimagesize' => InvokableFactory::class, 'zendvalidatorfileiscompressed' => InvokableFactory::class, 'zendvalidatorfileisimage' => InvokableFactory::class, 'zendvalidatorfilemd5' => InvokableFactory::class, 'zendvalidatorfilemimetype' => InvokableFactory::class, 'zendvalidatorfilenotexists' => InvokableFactory::class, 'zendvalidatorfilesha1' => InvokableFactory::class, 'zendvalidatorfilesize' => InvokableFactory::class, 'zendvalidatorfileupload' => InvokableFactory::class, 'zendvalidatorfileuploadfile' => InvokableFactory::class, 'zendvalidatorfilewordcount' => InvokableFactory::class, 'zendvalidatorgpspoint' => InvokableFactory::class, 'zendvalidatorgreaterthan' => InvokableFactory::class, 'zendvalidatorhex' => InvokableFactory::class, 'zendvalidatorhostname' => InvokableFactory::class, 'zendi18nvalidatoralnum' => InvokableFactory::class, 'zendi18nvalidatoralpha' => InvokableFactory::class, 'zendi18nvalidatordatetime' => InvokableFactory::class, 'zendi18nvalidatorisfloat' => InvokableFactory::class, 'zendi18nvalidatorisint' => InvokableFactory::class, 'zendi18nvalidatorphonenumber' => InvokableFactory::class, 'zendi18nvalidatorpostcode' => InvokableFactory::class, 'zendvalidatoriban' => InvokableFactory::class, 'zendvalidatoridentical' => InvokableFactory::class, 'zendvalidatorinarray' => InvokableFactory::class, 'zendvalidatorip' => InvokableFactory::class, 'zendvalidatorisbn' => InvokableFactory::class, 'zendvalidatorisinstanceof' => InvokableFactory::class, 'zendvalidatorlessthan' => InvokableFactory::class, 'zendvalidatornotempty' => InvokableFactory::class, 'zendvalidatorregex' => InvokableFactory::class, 'zendvalidatorsitemapchangefreq' => InvokableFactory::class, 'zendvalidatorsitemaplastmod' => InvokableFactory::class, 'zendvalidatorsitemaploc' => InvokableFactory::class, 'zendvalidatorsitemappriority' => InvokableFactory::class, 'zendvalidatorstringlength' => InvokableFactory::class, 'zendvalidatorstep' => InvokableFactory::class, 'zendvalidatortimezone' => InvokableFactory::class, 'zendvalidatoruri' => InvokableFactory::class, 'zendvalidatoruuid' => InvokableFactory::class, ]; /** * Whether or not to share by default; default to false (v2) * * @var bool */ protected $shareByDefault = false; /** * Whether or not to share by default; default to false (v3) * * @var bool */ protected $sharedByDefault = false; /** * Default instance type * * @var string */ protected $instanceOf = ValidatorInterface::class; /** * Constructor * * After invoking parent constructor, add an initializer to inject the * attached translator, if any, to the currently requested helper. * * {@inheritDoc} */ public function __construct($configOrContainerInstance = null, array $v3config = []) { parent::__construct($configOrContainerInstance, $v3config); $this->addInitializer([$this, 'injectTranslator']); $this->addInitializer([$this, 'injectValidatorPluginManager']); } /** * Validate plugin instance * * {@inheritDoc} */ public function validate($plugin) { if (! $plugin instanceof $this->instanceOf) { throw new InvalidServiceException(sprintf( '%s expects only to create instances of %s; %s is invalid', get_class($this), $this->instanceOf, (is_object($plugin) ? get_class($plugin) : gettype($plugin)) )); } } /** * For v2 compatibility: validate plugin instance. * * Proxies to `validate()`. * * @param mixed $plugin * @throws Exception\RuntimeException */ public function validatePlugin($plugin) { try { $this->validate($plugin); } catch (InvalidServiceException $e) { throw new Exception\RuntimeException(sprintf( 'Plugin of type %s is invalid; must implement %s', (is_object($plugin) ? get_class($plugin) : gettype($plugin)), ValidatorInterface::class ), $e->getCode(), $e); } } /** * Inject a validator instance with the registered translator * * @param ContainerInterface|object $first * @param ContainerInterface|object $second * @return void */ public function injectTranslator($first, $second) { if ($first instanceof ContainerInterface) { $container = $first; $validator = $second; } else { $container = $second; $validator = $first; } // V2 means we pull it from the parent container if ($container === $this && method_exists($container, 'getServiceLocator') && $container->getServiceLocator()) { $container = $container->getServiceLocator(); } if ($validator instanceof Translator\TranslatorAwareInterface) { if ($container && $container->has('MvcTranslator')) { $validator->setTranslator($container->get('MvcTranslator')); } } } /** * Inject a validator plugin manager * * @param ContainerInterface|object $first * @param ContainerInterface|object $second * @return void */ public function injectValidatorPluginManager($first, $second) { if ($first instanceof ContainerInterface) { $container = $first; $validator = $second; } else { $container = $second; $validator = $first; } if ($validator instanceof ValidatorPluginManagerAwareInterface) { $validator->setValidatorPluginManager($this); } } }