1<?php 2 3/** 4 * @see https://github.com/laminas/laminas-validator for the canonical source repository 5 * @copyright https://github.com/laminas/laminas-validator/blob/master/COPYRIGHT.md 6 * @license https://github.com/laminas/laminas-validator/blob/master/LICENSE.md New BSD License 7 */ 8 9namespace Laminas\Validator; 10 11use Interop\Container\ContainerInterface; 12use Laminas\I18n\Validator as I18nValidator; 13use Laminas\ServiceManager\AbstractPluginManager; 14use Laminas\ServiceManager\Exception\InvalidServiceException; 15use Laminas\ServiceManager\Factory\InvokableFactory; 16 17class ValidatorPluginManager extends AbstractPluginManager 18{ 19 /** 20 * Default set of aliases 21 * 22 * @var array 23 */ 24 protected $aliases = [ 25 'alnum' => I18nValidator\Alnum::class, 26 'Alnum' => I18nValidator\Alnum::class, 27 'alpha' => I18nValidator\Alpha::class, 28 'Alpha' => I18nValidator\Alpha::class, 29 'barcode' => Barcode::class, 30 'Barcode' => Barcode::class, 31 'between' => Between::class, 32 'Between' => Between::class, 33 'bitwise' => Bitwise::class, 34 'Bitwise' => Bitwise::class, 35 'callback' => Callback::class, 36 'Callback' => Callback::class, 37 'creditcard' => CreditCard::class, 38 'creditCard' => CreditCard::class, 39 'CreditCard' => CreditCard::class, 40 'csrf' => Csrf::class, 41 'Csrf' => Csrf::class, 42 'date' => Date::class, 43 'Date' => Date::class, 44 'datestep' => DateStep::class, 45 'dateStep' => DateStep::class, 46 'DateStep' => DateStep::class, 47 'datetime' => I18nValidator\DateTime::class, 48 'dateTime' => I18nValidator\DateTime::class, 49 'DateTime' => I18nValidator\DateTime::class, 50 'dbnorecordexists' => Db\NoRecordExists::class, 51 'dbNoRecordExists' => Db\NoRecordExists::class, 52 'DbNoRecordExists' => Db\NoRecordExists::class, 53 'dbrecordexists' => Db\RecordExists::class, 54 'dbRecordExists' => Db\RecordExists::class, 55 'DbRecordExists' => Db\RecordExists::class, 56 'digits' => Digits::class, 57 'Digits' => Digits::class, 58 'emailaddress' => EmailAddress::class, 59 'emailAddress' => EmailAddress::class, 60 'EmailAddress' => EmailAddress::class, 61 'explode' => Explode::class, 62 'Explode' => Explode::class, 63 'filecount' => File\Count::class, 64 'fileCount' => File\Count::class, 65 'FileCount' => File\Count::class, 66 'filecrc32' => File\Crc32::class, 67 'fileCrc32' => File\Crc32::class, 68 'FileCrc32' => File\Crc32::class, 69 'fileexcludeextension' => File\ExcludeExtension::class, 70 'fileExcludeExtension' => File\ExcludeExtension::class, 71 'FileExcludeExtension' => File\ExcludeExtension::class, 72 'fileexcludemimetype' => File\ExcludeMimeType::class, 73 'fileExcludeMimeType' => File\ExcludeMimeType::class, 74 'FileExcludeMimeType' => File\ExcludeMimeType::class, 75 'fileexists' => File\Exists::class, 76 'fileExists' => File\Exists::class, 77 'FileExists' => File\Exists::class, 78 'fileextension' => File\Extension::class, 79 'fileExtension' => File\Extension::class, 80 'FileExtension' => File\Extension::class, 81 'filefilessize' => File\FilesSize::class, 82 'fileFilesSize' => File\FilesSize::class, 83 'FileFilesSize' => File\FilesSize::class, 84 'filehash' => File\Hash::class, 85 'fileHash' => File\Hash::class, 86 'FileHash' => File\Hash::class, 87 'fileimagesize' => File\ImageSize::class, 88 'fileImageSize' => File\ImageSize::class, 89 'FileImageSize' => File\ImageSize::class, 90 'fileiscompressed' => File\IsCompressed::class, 91 'fileIsCompressed' => File\IsCompressed::class, 92 'FileIsCompressed' => File\IsCompressed::class, 93 'fileisimage' => File\IsImage::class, 94 'fileIsImage' => File\IsImage::class, 95 'FileIsImage' => File\IsImage::class, 96 'filemd5' => File\Md5::class, 97 'fileMd5' => File\Md5::class, 98 'FileMd5' => File\Md5::class, 99 'filemimetype' => File\MimeType::class, 100 'fileMimeType' => File\MimeType::class, 101 'FileMimeType' => File\MimeType::class, 102 'filenotexists' => File\NotExists::class, 103 'fileNotExists' => File\NotExists::class, 104 'FileNotExists' => File\NotExists::class, 105 'filesha1' => File\Sha1::class, 106 'fileSha1' => File\Sha1::class, 107 'FileSha1' => File\Sha1::class, 108 'filesize' => File\Size::class, 109 'fileSize' => File\Size::class, 110 'FileSize' => File\Size::class, 111 'fileupload' => File\Upload::class, 112 'fileUpload' => File\Upload::class, 113 'FileUpload' => File\Upload::class, 114 'fileuploadfile' => File\UploadFile::class, 115 'fileUploadFile' => File\UploadFile::class, 116 'FileUploadFile' => File\UploadFile::class, 117 'filewordcount' => File\WordCount::class, 118 'fileWordCount' => File\WordCount::class, 119 'FileWordCount' => File\WordCount::class, 120 'float' => I18nValidator\IsFloat::class, 121 'Float' => I18nValidator\IsFloat::class, 122 'gpspoint' => GpsPoint::class, 123 'gpsPoint' => GpsPoint::class, 124 'GpsPoint' => GpsPoint::class, 125 'greaterthan' => GreaterThan::class, 126 'greaterThan' => GreaterThan::class, 127 'GreaterThan' => GreaterThan::class, 128 'hex' => Hex::class, 129 'Hex' => Hex::class, 130 'hostname' => Hostname::class, 131 'Hostname' => Hostname::class, 132 'iban' => Iban::class, 133 'Iban' => Iban::class, 134 'identical' => Identical::class, 135 'Identical' => Identical::class, 136 'inarray' => InArray::class, 137 'inArray' => InArray::class, 138 'InArray' => InArray::class, 139 'int' => I18nValidator\IsInt::class, 140 'Int' => I18nValidator\IsInt::class, 141 'ip' => Ip::class, 142 'Ip' => Ip::class, 143 'isbn' => Isbn::class, 144 'Isbn' => Isbn::class, 145 'isfloat' => I18nValidator\IsFloat::class, 146 'isFloat' => I18nValidator\IsFloat::class, 147 'IsFloat' => I18nValidator\IsFloat::class, 148 'isinstanceof' => IsInstanceOf::class, 149 'isInstanceOf' => IsInstanceOf::class, 150 'IsInstanceOf' => IsInstanceOf::class, 151 'isint' => I18nValidator\IsInt::class, 152 'isInt' => I18nValidator\IsInt::class, 153 'IsInt' => I18nValidator\IsInt::class, 154 'lessthan' => LessThan::class, 155 'lessThan' => LessThan::class, 156 'LessThan' => LessThan::class, 157 'notempty' => NotEmpty::class, 158 'notEmpty' => NotEmpty::class, 159 'NotEmpty' => NotEmpty::class, 160 'phonenumber' => I18nValidator\PhoneNumber::class, 161 'phoneNumber' => I18nValidator\PhoneNumber::class, 162 'PhoneNumber' => I18nValidator\PhoneNumber::class, 163 'postcode' => I18nValidator\PostCode::class, 164 'postCode' => I18nValidator\PostCode::class, 165 'PostCode' => I18nValidator\PostCode::class, 166 'regex' => Regex::class, 167 'Regex' => Regex::class, 168 'sitemapchangefreq' => Sitemap\Changefreq::class, 169 'sitemapChangefreq' => Sitemap\Changefreq::class, 170 'SitemapChangefreq' => Sitemap\Changefreq::class, 171 'sitemaplastmod' => Sitemap\Lastmod::class, 172 'sitemapLastmod' => Sitemap\Lastmod::class, 173 'SitemapLastmod' => Sitemap\Lastmod::class, 174 'sitemaploc' => Sitemap\Loc::class, 175 'sitemapLoc' => Sitemap\Loc::class, 176 'SitemapLoc' => Sitemap\Loc::class, 177 'sitemappriority' => Sitemap\Priority::class, 178 'sitemapPriority' => Sitemap\Priority::class, 179 'SitemapPriority' => Sitemap\Priority::class, 180 'stringlength' => StringLength::class, 181 'stringLength' => StringLength::class, 182 'StringLength' => StringLength::class, 183 'step' => Step::class, 184 'Step' => Step::class, 185 'timezone' => Timezone::class, 186 'Timezone' => Timezone::class, 187 'uri' => Uri::class, 188 'Uri' => Uri::class, 189 'uuid' => Uuid::class, 190 'Uuid' => Uuid::class, 191 192 // Legacy Zend Framework aliases 193 \Zend\I18n\Validator\Alnum::class => I18nValidator\Alnum::class, 194 \Zend\I18n\Validator\Alpha::class => I18nValidator\Alpha::class, 195 \Zend\Validator\Barcode::class => Barcode::class, 196 \Zend\Validator\Between::class => Between::class, 197 \Zend\Validator\Bitwise::class => Bitwise::class, 198 \Zend\Validator\Callback::class => Callback::class, 199 \Zend\Validator\CreditCard::class => CreditCard::class, 200 \Zend\Validator\Csrf::class => Csrf::class, 201 \Zend\Validator\DateStep::class => DateStep::class, 202 \Zend\Validator\Date::class => Date::class, 203 \Zend\I18n\Validator\DateTime::class => I18nValidator\DateTime::class, 204 \Zend\Validator\Db\NoRecordExists::class => Db\NoRecordExists::class, 205 \Zend\Validator\Db\RecordExists::class => Db\RecordExists::class, 206 \Zend\Validator\Digits::class => Digits::class, 207 \Zend\Validator\EmailAddress::class => EmailAddress::class, 208 \Zend\Validator\Explode::class => Explode::class, 209 \Zend\Validator\File\Count::class => File\Count::class, 210 \Zend\Validator\File\Crc32::class => File\Crc32::class, 211 \Zend\Validator\File\ExcludeExtension::class => File\ExcludeExtension::class, 212 \Zend\Validator\File\ExcludeMimeType::class => File\ExcludeMimeType::class, 213 \Zend\Validator\File\Exists::class => File\Exists::class, 214 \Zend\Validator\File\Extension::class => File\Extension::class, 215 \Zend\Validator\File\FilesSize::class => File\FilesSize::class, 216 \Zend\Validator\File\Hash::class => File\Hash::class, 217 \Zend\Validator\File\ImageSize::class => File\ImageSize::class, 218 \Zend\Validator\File\IsCompressed::class => File\IsCompressed::class, 219 \Zend\Validator\File\IsImage::class => File\IsImage::class, 220 \Zend\Validator\File\Md5::class => File\Md5::class, 221 \Zend\Validator\File\MimeType::class => File\MimeType::class, 222 \Zend\Validator\File\NotExists::class => File\NotExists::class, 223 \Zend\Validator\File\Sha1::class => File\Sha1::class, 224 \Zend\Validator\File\Size::class => File\Size::class, 225 \Zend\Validator\File\Upload::class => File\Upload::class, 226 \Zend\Validator\File\UploadFile::class => File\UploadFile::class, 227 \Zend\Validator\File\WordCount::class => File\WordCount::class, 228 \Zend\I18n\Validator\IsFloat::class => I18nValidator\IsFloat::class, 229 \Zend\Validator\GpsPoint::class => GpsPoint::class, 230 \Zend\Validator\GreaterThan::class => GreaterThan::class, 231 \Zend\Validator\Hex::class => Hex::class, 232 \Zend\Validator\Hostname::class => Hostname::class, 233 \Zend\Validator\Iban::class => Iban::class, 234 \Zend\Validator\Identical::class => Identical::class, 235 \Zend\Validator\InArray::class => InArray::class, 236 \Zend\I18n\Validator\IsInt::class => I18nValidator\IsInt::class, 237 \Zend\Validator\Ip::class => Ip::class, 238 \Zend\Validator\Isbn::class => Isbn::class, 239 \Zend\Validator\IsInstanceOf::class => IsInstanceOf::class, 240 \Zend\Validator\LessThan::class => LessThan::class, 241 \Zend\Validator\NotEmpty::class => NotEmpty::class, 242 \Zend\I18n\Validator\PhoneNumber::class => I18nValidator\PhoneNumber::class, 243 \Zend\I18n\Validator\PostCode::class => I18nValidator\PostCode::class, 244 \Zend\Validator\Regex::class => Regex::class, 245 \Zend\Validator\Sitemap\Changefreq::class => Sitemap\Changefreq::class, 246 \Zend\Validator\Sitemap\Lastmod::class => Sitemap\Lastmod::class, 247 \Zend\Validator\Sitemap\Loc::class => Sitemap\Loc::class, 248 \Zend\Validator\Sitemap\Priority::class => Sitemap\Priority::class, 249 \Zend\Validator\StringLength::class => StringLength::class, 250 \Zend\Validator\Step::class => Step::class, 251 \Zend\Validator\Timezone::class => Timezone::class, 252 \Zend\Validator\Uri::class => Uri::class, 253 \Zend\Validator\Uuid::class => Uuid::class, 254 255 // v2 normalized FQCNs 256 'zendvalidatorbarcode' => Barcode::class, 257 'zendvalidatorbetween' => Between::class, 258 'zendvalidatorbitwise' => Bitwise::class, 259 'zendvalidatorcallback' => Callback::class, 260 'zendvalidatorcreditcard' => CreditCard::class, 261 'zendvalidatorcsrf' => Csrf::class, 262 'zendvalidatordatestep' => DateStep::class, 263 'zendvalidatordate' => Date::class, 264 'zendvalidatordbnorecordexists' => Db\NoRecordExists::class, 265 'zendvalidatordbrecordexists' => Db\RecordExists::class, 266 'zendvalidatordigits' => Digits::class, 267 'zendvalidatoremailaddress' => EmailAddress::class, 268 'zendvalidatorexplode' => Explode::class, 269 'zendvalidatorfilecount' => File\Count::class, 270 'zendvalidatorfilecrc32' => File\Crc32::class, 271 'zendvalidatorfileexcludeextension' => File\ExcludeExtension::class, 272 'zendvalidatorfileexcludemimetype' => File\ExcludeMimeType::class, 273 'zendvalidatorfileexists' => File\Exists::class, 274 'zendvalidatorfileextension' => File\Extension::class, 275 'zendvalidatorfilefilessize' => File\FilesSize::class, 276 'zendvalidatorfilehash' => File\Hash::class, 277 'zendvalidatorfileimagesize' => File\ImageSize::class, 278 'zendvalidatorfileiscompressed' => File\IsCompressed::class, 279 'zendvalidatorfileisimage' => File\IsImage::class, 280 'zendvalidatorfilemd5' => File\Md5::class, 281 'zendvalidatorfilemimetype' => File\MimeType::class, 282 'zendvalidatorfilenotexists' => File\NotExists::class, 283 'zendvalidatorfilesha1' => File\Sha1::class, 284 'zendvalidatorfilesize' => File\Size::class, 285 'zendvalidatorfileupload' => File\Upload::class, 286 'zendvalidatorfileuploadfile' => File\UploadFile::class, 287 'zendvalidatorfilewordcount' => File\WordCount::class, 288 'zendvalidatorgpspoint' => GpsPoint::class, 289 'zendvalidatorgreaterthan' => GreaterThan::class, 290 'zendvalidatorhex' => Hex::class, 291 'zendvalidatorhostname' => Hostname::class, 292 'zendi18nvalidatoralnum' => I18nValidator\Alnum::class, 293 'zendi18nvalidatoralpha' => I18nValidator\Alpha::class, 294 'zendi18nvalidatordatetime' => I18nValidator\DateTime::class, 295 'zendi18nvalidatorisfloat' => I18nValidator\IsFloat::class, 296 'zendi18nvalidatorisint' => I18nValidator\IsInt::class, 297 'zendi18nvalidatorphonenumber' => I18nValidator\PhoneNumber::class, 298 'zendi18nvalidatorpostcode' => I18nValidator\PostCode::class, 299 'zendvalidatoriban' => Iban::class, 300 'zendvalidatoridentical' => Identical::class, 301 'zendvalidatorinarray' => InArray::class, 302 'zendvalidatorip' => Ip::class, 303 'zendvalidatorisbn' => Isbn::class, 304 'zendvalidatorisinstanceof' => IsInstanceOf::class, 305 'zendvalidatorlessthan' => LessThan::class, 306 'zendvalidatornotempty' => NotEmpty::class, 307 'zendvalidatorregex' => Regex::class, 308 'zendvalidatorsitemapchangefreq' => Sitemap\Changefreq::class, 309 'zendvalidatorsitemaplastmod' => Sitemap\Lastmod::class, 310 'zendvalidatorsitemaploc' => Sitemap\Loc::class, 311 'zendvalidatorsitemappriority' => Sitemap\Priority::class, 312 'zendvalidatorstringlength' => StringLength::class, 313 'zendvalidatorstep' => Step::class, 314 'zendvalidatortimezone' => Timezone::class, 315 'zendvalidatoruri' => Uri::class, 316 'zendvalidatoruuid' => Uuid::class, 317 ]; 318 319 /** 320 * Default set of factories 321 * 322 * @var array 323 */ 324 protected $factories = [ 325 I18nValidator\Alnum::class => InvokableFactory::class, 326 I18nValidator\Alpha::class => InvokableFactory::class, 327 Barcode::class => InvokableFactory::class, 328 Between::class => InvokableFactory::class, 329 Bitwise::class => InvokableFactory::class, 330 Callback::class => InvokableFactory::class, 331 CreditCard::class => InvokableFactory::class, 332 Csrf::class => InvokableFactory::class, 333 DateStep::class => InvokableFactory::class, 334 Date::class => InvokableFactory::class, 335 I18nValidator\DateTime::class => InvokableFactory::class, 336 Db\NoRecordExists::class => InvokableFactory::class, 337 Db\RecordExists::class => InvokableFactory::class, 338 Digits::class => InvokableFactory::class, 339 EmailAddress::class => InvokableFactory::class, 340 Explode::class => InvokableFactory::class, 341 File\Count::class => InvokableFactory::class, 342 File\Crc32::class => InvokableFactory::class, 343 File\ExcludeExtension::class => InvokableFactory::class, 344 File\ExcludeMimeType::class => InvokableFactory::class, 345 File\Exists::class => InvokableFactory::class, 346 File\Extension::class => InvokableFactory::class, 347 File\FilesSize::class => InvokableFactory::class, 348 File\Hash::class => InvokableFactory::class, 349 File\ImageSize::class => InvokableFactory::class, 350 File\IsCompressed::class => InvokableFactory::class, 351 File\IsImage::class => InvokableFactory::class, 352 File\Md5::class => InvokableFactory::class, 353 File\MimeType::class => InvokableFactory::class, 354 File\NotExists::class => InvokableFactory::class, 355 File\Sha1::class => InvokableFactory::class, 356 File\Size::class => InvokableFactory::class, 357 File\Upload::class => InvokableFactory::class, 358 File\UploadFile::class => InvokableFactory::class, 359 File\WordCount::class => InvokableFactory::class, 360 I18nValidator\IsFloat::class => InvokableFactory::class, 361 GpsPoint::class => InvokableFactory::class, 362 GreaterThan::class => InvokableFactory::class, 363 Hex::class => InvokableFactory::class, 364 Hostname::class => InvokableFactory::class, 365 Iban::class => InvokableFactory::class, 366 Identical::class => InvokableFactory::class, 367 InArray::class => InvokableFactory::class, 368 I18nValidator\IsInt::class => InvokableFactory::class, 369 Ip::class => InvokableFactory::class, 370 Isbn::class => InvokableFactory::class, 371 I18nValidator\IsFloat::class => InvokableFactory::class, 372 IsInstanceOf::class => InvokableFactory::class, 373 I18nValidator\IsInt::class => InvokableFactory::class, 374 LessThan::class => InvokableFactory::class, 375 NotEmpty::class => InvokableFactory::class, 376 I18nValidator\PhoneNumber::class => InvokableFactory::class, 377 I18nValidator\PostCode::class => InvokableFactory::class, 378 Regex::class => InvokableFactory::class, 379 Sitemap\Changefreq::class => InvokableFactory::class, 380 Sitemap\Lastmod::class => InvokableFactory::class, 381 Sitemap\Loc::class => InvokableFactory::class, 382 Sitemap\Priority::class => InvokableFactory::class, 383 StringLength::class => InvokableFactory::class, 384 Step::class => InvokableFactory::class, 385 Timezone::class => InvokableFactory::class, 386 Uri::class => InvokableFactory::class, 387 Uuid::class => InvokableFactory::class, 388 389 // v2 canonical FQCNs 390 391 'laminasvalidatorbarcodecode25interleaved' => InvokableFactory::class, 392 'laminasvalidatorbarcodecode25' => InvokableFactory::class, 393 'laminasvalidatorbarcodecode39ext' => InvokableFactory::class, 394 'laminasvalidatorbarcodecode39' => InvokableFactory::class, 395 'laminasvalidatorbarcodecode93ext' => InvokableFactory::class, 396 'laminasvalidatorbarcodecode93' => InvokableFactory::class, 397 'laminasvalidatorbarcodeean12' => InvokableFactory::class, 398 'laminasvalidatorbarcodeean13' => InvokableFactory::class, 399 'laminasvalidatorbarcodeean14' => InvokableFactory::class, 400 'laminasvalidatorbarcodeean18' => InvokableFactory::class, 401 'laminasvalidatorbarcodeean2' => InvokableFactory::class, 402 'laminasvalidatorbarcodeean5' => InvokableFactory::class, 403 'laminasvalidatorbarcodeean8' => InvokableFactory::class, 404 'laminasvalidatorbarcodegtin12' => InvokableFactory::class, 405 'laminasvalidatorbarcodegtin13' => InvokableFactory::class, 406 'laminasvalidatorbarcodegtin14' => InvokableFactory::class, 407 'laminasvalidatorbarcodeidentcode' => InvokableFactory::class, 408 'laminasvalidatorbarcodeintelligentmail' => InvokableFactory::class, 409 'laminasvalidatorbarcodeissn' => InvokableFactory::class, 410 'laminasvalidatorbarcodeitf14' => InvokableFactory::class, 411 'laminasvalidatorbarcodeleitcode' => InvokableFactory::class, 412 'laminasvalidatorbarcodeplanet' => InvokableFactory::class, 413 'laminasvalidatorbarcodepostnet' => InvokableFactory::class, 414 'laminasvalidatorbarcoderoyalmail' => InvokableFactory::class, 415 'laminasvalidatorbarcodesscc' => InvokableFactory::class, 416 'laminasvalidatorbarcodeupca' => InvokableFactory::class, 417 'laminasvalidatorbarcodeupce' => InvokableFactory::class, 418 'laminasvalidatorbarcode' => InvokableFactory::class, 419 'laminasvalidatorbetween' => InvokableFactory::class, 420 'laminasvalidatorbitwise' => InvokableFactory::class, 421 'laminasvalidatorcallback' => InvokableFactory::class, 422 'laminasvalidatorcreditcard' => InvokableFactory::class, 423 'laminasvalidatorcsrf' => InvokableFactory::class, 424 'laminasvalidatordatestep' => InvokableFactory::class, 425 'laminasvalidatordate' => InvokableFactory::class, 426 'laminasvalidatordbnorecordexists' => InvokableFactory::class, 427 'laminasvalidatordbrecordexists' => InvokableFactory::class, 428 'laminasvalidatordigits' => InvokableFactory::class, 429 'laminasvalidatoremailaddress' => InvokableFactory::class, 430 'laminasvalidatorexplode' => InvokableFactory::class, 431 'laminasvalidatorfilecount' => InvokableFactory::class, 432 'laminasvalidatorfilecrc32' => InvokableFactory::class, 433 'laminasvalidatorfileexcludeextension' => InvokableFactory::class, 434 'laminasvalidatorfileexcludemimetype' => InvokableFactory::class, 435 'laminasvalidatorfileexists' => InvokableFactory::class, 436 'laminasvalidatorfileextension' => InvokableFactory::class, 437 'laminasvalidatorfilefilessize' => InvokableFactory::class, 438 'laminasvalidatorfilehash' => InvokableFactory::class, 439 'laminasvalidatorfileimagesize' => InvokableFactory::class, 440 'laminasvalidatorfileiscompressed' => InvokableFactory::class, 441 'laminasvalidatorfileisimage' => InvokableFactory::class, 442 'laminasvalidatorfilemd5' => InvokableFactory::class, 443 'laminasvalidatorfilemimetype' => InvokableFactory::class, 444 'laminasvalidatorfilenotexists' => InvokableFactory::class, 445 'laminasvalidatorfilesha1' => InvokableFactory::class, 446 'laminasvalidatorfilesize' => InvokableFactory::class, 447 'laminasvalidatorfileupload' => InvokableFactory::class, 448 'laminasvalidatorfileuploadfile' => InvokableFactory::class, 449 'laminasvalidatorfilewordcount' => InvokableFactory::class, 450 'laminasvalidatorgpspoint' => InvokableFactory::class, 451 'laminasvalidatorgreaterthan' => InvokableFactory::class, 452 'laminasvalidatorhex' => InvokableFactory::class, 453 'laminasvalidatorhostname' => InvokableFactory::class, 454 'laminasi18nvalidatoralnum' => InvokableFactory::class, 455 'laminasi18nvalidatoralpha' => InvokableFactory::class, 456 'laminasi18nvalidatordatetime' => InvokableFactory::class, 457 'laminasi18nvalidatorisfloat' => InvokableFactory::class, 458 'laminasi18nvalidatorisint' => InvokableFactory::class, 459 'laminasi18nvalidatorphonenumber' => InvokableFactory::class, 460 'laminasi18nvalidatorpostcode' => InvokableFactory::class, 461 'laminasvalidatoriban' => InvokableFactory::class, 462 'laminasvalidatoridentical' => InvokableFactory::class, 463 'laminasvalidatorinarray' => InvokableFactory::class, 464 'laminasvalidatorip' => InvokableFactory::class, 465 'laminasvalidatorisbn' => InvokableFactory::class, 466 'laminasvalidatorisinstanceof' => InvokableFactory::class, 467 'laminasvalidatorlessthan' => InvokableFactory::class, 468 'laminasvalidatornotempty' => InvokableFactory::class, 469 'laminasvalidatorregex' => InvokableFactory::class, 470 'laminasvalidatorsitemapchangefreq' => InvokableFactory::class, 471 'laminasvalidatorsitemaplastmod' => InvokableFactory::class, 472 'laminasvalidatorsitemaploc' => InvokableFactory::class, 473 'laminasvalidatorsitemappriority' => InvokableFactory::class, 474 'laminasvalidatorstringlength' => InvokableFactory::class, 475 'laminasvalidatorstep' => InvokableFactory::class, 476 'laminasvalidatortimezone' => InvokableFactory::class, 477 'laminasvalidatoruri' => InvokableFactory::class, 478 'laminasvalidatoruuid' => InvokableFactory::class, 479 ]; 480 481 /** 482 * Whether or not to share by default; default to false (v2) 483 * 484 * @var bool 485 */ 486 protected $shareByDefault = false; 487 488 /** 489 * Whether or not to share by default; default to false (v3) 490 * 491 * @var bool 492 */ 493 protected $sharedByDefault = false; 494 495 /** 496 * Default instance type 497 * 498 * @var string 499 */ 500 protected $instanceOf = ValidatorInterface::class; 501 502 /** 503 * Constructor 504 * 505 * After invoking parent constructor, add an initializer to inject the 506 * attached translator, if any, to the currently requested helper. 507 * 508 * {@inheritDoc} 509 */ 510 public function __construct($configOrContainerInstance = null, array $v3config = []) 511 { 512 parent::__construct($configOrContainerInstance, $v3config); 513 514 $this->addInitializer([$this, 'injectTranslator']); 515 $this->addInitializer([$this, 'injectValidatorPluginManager']); 516 } 517 518 /** 519 * Validate plugin instance 520 * 521 * {@inheritDoc} 522 */ 523 public function validate($plugin) 524 { 525 if (! $plugin instanceof $this->instanceOf) { 526 throw new InvalidServiceException(sprintf( 527 '%s expects only to create instances of %s; %s is invalid', 528 get_class($this), 529 $this->instanceOf, 530 is_object($plugin) ? get_class($plugin) : gettype($plugin) 531 )); 532 } 533 } 534 535 /** 536 * For v2 compatibility: validate plugin instance. 537 * 538 * Proxies to `validate()`. 539 * 540 * @param mixed $plugin 541 * @throws Exception\RuntimeException 542 */ 543 public function validatePlugin($plugin) 544 { 545 try { 546 $this->validate($plugin); 547 } catch (InvalidServiceException $e) { 548 throw new Exception\RuntimeException(sprintf( 549 'Plugin of type %s is invalid; must implement %s', 550 is_object($plugin) ? get_class($plugin) : gettype($plugin), 551 ValidatorInterface::class 552 ), $e->getCode(), $e); 553 } 554 } 555 556 /** 557 * Inject a validator instance with the registered translator 558 * 559 * @param ContainerInterface|object $first 560 * @param ContainerInterface|object $second 561 * @return void 562 */ 563 public function injectTranslator($first, $second) 564 { 565 if ($first instanceof ContainerInterface) { 566 $container = $first; 567 $validator = $second; 568 } else { 569 $container = $second; 570 $validator = $first; 571 } 572 573 // V2 means we pull it from the parent container 574 if ($container === $this && method_exists($container, 'getServiceLocator') && $container->getServiceLocator()) { 575 $container = $container->getServiceLocator(); 576 } 577 578 if ($validator instanceof Translator\TranslatorAwareInterface) { 579 if ($container && $container->has('MvcTranslator')) { 580 $validator->setTranslator($container->get('MvcTranslator')); 581 } 582 } 583 } 584 585 /** 586 * Inject a validator plugin manager 587 * 588 * @param ContainerInterface|object $first 589 * @param ContainerInterface|object $second 590 * @return void 591 */ 592 public function injectValidatorPluginManager($first, $second) 593 { 594 if ($first instanceof ContainerInterface) { 595 $container = $first; 596 $validator = $second; 597 } else { 598 $container = $second; 599 $validator = $first; 600 } 601 if ($validator instanceof ValidatorPluginManagerAwareInterface) { 602 $validator->setValidatorPluginManager($this); 603 } 604 } 605} 606