From a98d7f64578739c7c6e6254fef3dd01e68da1efe Mon Sep 17 00:00:00 2001 From: Enrico Zimuel Date: Thu, 7 Jan 2016 18:35:40 +0100 Subject: [PATCH 1/4] Code refactor with the new servicemanager --- composer.json | 19 +- src/Explode.php | 3 +- src/StaticValidator.php | 6 +- src/ValidatorChain.php | 3 +- src/ValidatorPluginManager.php | 414 +++++++++++++++++++--------- test/StaticValidatorTest.php | 16 +- test/ValidatorPluginManagerTest.php | 20 +- 7 files changed, 325 insertions(+), 156 deletions(-) diff --git a/composer.json b/composer.json index f2e2657a6..0ca69d224 100644 --- a/composer.json +++ b/composer.json @@ -14,18 +14,19 @@ }, "require": { "php": ">=5.5", - "zendframework/zend-stdlib": "~2.5" + "zendframework/zend-stdlib": "dev-develop as 2.8.0", + "container-interop/container-interop": "^1.1" }, "require-dev": { - "zendframework/zend-cache": "~2.5", - "zendframework/zend-config": "~2.5", - "zendframework/zend-db": "~2.5", - "zendframework/zend-filter": "~2.5", + "zendframework/zend-cache": "dev-develop as 2.6.0", + "zendframework/zend-config": "dev-develop as 2.6.0", + "zendframework/zend-db": "dev-develop as 2.7.0", + "zendframework/zend-filter": "dev-develop as 2.6.0", "zendframework/zend-http": "~2.5", - "zendframework/zend-i18n": "~2.5", - "zendframework/zend-math": "~2.5", - "zendframework/zend-servicemanager": "~2.5", - "zendframework/zend-session": "~2.5", + "zendframework/zend-i18n": "dev-develop as 2.6.0", + "zendframework/zend-math": "dev-develop as 2.6.0", + "zendframework/zend-servicemanager": "dev-develop as 2.7.0", + "zendframework/zend-session": "dev-develop as 2.6.0", "zendframework/zend-uri": "~2.5", "fabpot/php-cs-fixer": "1.7.*", "phpunit/PHPUnit": "~4.0" diff --git a/src/Explode.php b/src/Explode.php index 58415c7d0..181437be7 100644 --- a/src/Explode.php +++ b/src/Explode.php @@ -11,6 +11,7 @@ use Traversable; use Zend\Stdlib\ArrayUtils; +use Zend\ServiceManager\ServiceManager; class Explode extends AbstractValidator implements ValidatorPluginManagerAwareInterface { @@ -85,7 +86,7 @@ public function setValidatorPluginManager(ValidatorPluginManager $pluginManager) public function getValidatorPluginManager() { if (!$this->pluginManager) { - $this->setValidatorPluginManager(new ValidatorPluginManager()); + $this->setValidatorPluginManager(new ValidatorPluginManager(new ServiceManager)); } return $this->pluginManager; diff --git a/src/StaticValidator.php b/src/StaticValidator.php index 90973fe9e..6ed741e54 100644 --- a/src/StaticValidator.php +++ b/src/StaticValidator.php @@ -9,6 +9,8 @@ namespace Zend\Validator; +use Zend\ServiceManager\ServiceManager; + class StaticValidator { /** @@ -26,7 +28,7 @@ public static function setPluginManager(ValidatorPluginManager $plugins = null) { // Don't share by default to allow different arguments on subsequent calls if ($plugins instanceof ValidatorPluginManager) { - $plugins->setShareByDefault(false); + $plugins->configure(['shared_by_default' => false]); } static::$plugins = $plugins; } @@ -39,7 +41,7 @@ public static function setPluginManager(ValidatorPluginManager $plugins = null) public static function getPluginManager() { if (null === static::$plugins) { - static::setPluginManager(new ValidatorPluginManager()); + static::setPluginManager(new ValidatorPluginManager(new ServiceManager)); } return static::$plugins; } diff --git a/src/ValidatorChain.php b/src/ValidatorChain.php index 3888ec6ae..6a857645e 100644 --- a/src/ValidatorChain.php +++ b/src/ValidatorChain.php @@ -11,6 +11,7 @@ use Countable; use Zend\Stdlib\PriorityQueue; +use Zend\ServiceManager\ServiceManager; class ValidatorChain implements Countable, @@ -66,7 +67,7 @@ public function count() public function getPluginManager() { if (!$this->plugins) { - $this->setPluginManager(new ValidatorPluginManager()); + $this->setPluginManager(new ValidatorPluginManager(new ServiceManager)); } return $this->plugins; } diff --git a/src/ValidatorPluginManager.php b/src/ValidatorPluginManager.php index 55b6b0830..e67cc2dd5 100644 --- a/src/ValidatorPluginManager.php +++ b/src/ValidatorPluginManager.php @@ -10,114 +10,292 @@ namespace Zend\Validator; use Zend\ServiceManager\AbstractPluginManager; -use Zend\ServiceManager\ConfigInterface; +use Zend\ServiceManager\Factory\InvokableFactory; +use Interop\Container\ContainerInterface; class ValidatorPluginManager extends AbstractPluginManager { /** - * Default aliases + * Default set of aliases * * @var array */ protected $aliases = [ - 'Zend\I18n\Validator\Float'=> 'Zend\I18n\Validator\IsFloat', - 'Zend\I18n\Validator\Int' => 'Zend\I18n\Validator\IsInt', + 'alnum' => Zend\I18n\Validator\Alnum::class, + 'Alnum' => Zend\I18n\Validator\Alnum::class, + 'alpha' => Zend\I18n\Validator\Alpha::class, + 'Alpha' => Zend\I18n\Validator\Alpha::class, + 'barcodecode25interleaved' => Barcode\Code25interleaved::class, + 'BarcodeCode25interleaved' => Barcode\Code25interleaved::class, + 'barcodecode25' => Barcode\Code25::class, + 'BarcodeCode25' => Barcode\Code25::class, + 'barcodecode39ext' => Barcode\Code39ext::class, + 'BarcodeCode39ext' => Barcode\Code39ext::class, + 'barcodecode39' => Barcode\Code39::class, + 'BarcodeCode39' => Barcode\Code39::class, + 'barcodecode93ext' => Barcode\Code93ext::class, + 'BarcodeCode93ext' => Barcode\Code93ext::class, + 'barcodecode93' => Barcode\Code93::class, + 'BarcodeCode93' => Barcode\Code93::class, + 'barcodeean12' => Barcode\Ean12::class, + 'BarcodeEan12' => Barcode\Ean12::class, + 'barcodeean13' => Barcode\Ean13::class, + 'BarcodeEan13' => Barcode\Ean13::class, + 'barcodeean14' => Barcode\Ean14::class, + 'BarcodeEan14' => Barcode\Ean14::class, + 'barcodeean18' => Barcode\Ean18::class, + 'BarcodeEan18' => Barcode\Ean18::class, + 'barcodeean2' => Barcode\Ean2::class, + 'BarcodeEan2' => Barcode\Ean2::class, + 'barcodeean5' => Barcode\Ean5::class, + 'BarcodeEan5' => Barcode\Ean5::class, + 'barcodeean8' => Barcode\Ean8::class, + 'BarcodeEan8' => Barcode\Ean8::class, + 'barcodegtin12' => Barcode\Gtin12::class, + 'BarcodeGtin12' => Barcode\Gtin12::class, + 'barcodegtin13' => Barcode\Gtin13::class, + 'BarcodeGtin13' => Barcode\Gtin13::class, + 'barcodegtin14' => Barcode\Gtin14::class, + 'BarcodeGtin14' => Barcode\Gtin14::class, + 'barcodeidentcode' => Barcode\Identcode::class, + 'BarcodeIdentcode' => Barcode\Identcode::class, + 'barcodeintelligentmail' => Barcode\Intelligentmail::class, + 'BarcodeIntelligentmail' => Barcode\Intelligentmail::class, + 'barcodeissn' => Barcode\Issn::class, + 'BarcodeIssn' => Barcode\Issn::class, + 'barcodeitf14' => Barcode\Itf14::class, + 'BarcodeItf14' => Barcode\Itf14::class, + 'barcodeleitcode' => Barcode\Leitcode::class, + 'BarcodeleItcode' => Barcode\Leitcode::class, + 'barcodeplanet' => Barcode\Planet::class, + 'BarcodePlanet' => Barcode\Planet::class, + 'barcodepostnet' => Barcode\Postnet::class, + 'BarcodePostnet' => Barcode\Postnet::class, + 'barcoderoyalmail' => Barcode\Royalmail::class, + 'BarcodeRoyalmail' => Barcode\Royalmail::class, + 'barcodesscc' => Barcode\Sscc::class, + 'BarcodeSscc' => Barcode\Sscc::class, + 'barcodeupca' => Barcode\Upca::class, + 'BarcodeUpca' => Barcode\Upca::class, + 'barcodeupce' => Barcode\Upce::class, + 'BarcodeUpce' => Barcode\Upce::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, + 'csrf' => Csrf::class, + 'Csrf' => Csrf::class, + 'date' => Date::class, + 'Date' => Date::class, + 'datestep' => DateStep::class, + 'DateStep' => DateStep::class, + 'datetime' => Zend\I18n\Validator\DateTime::class, + 'DateTime' => Zend\I18n\Validator\DateTime::class, + 'dbnorecordexists' => Db\NoRecordExists::class, + 'DbNoRecordExists' => Db\NoRecordExists::class, + 'dbrecordexists' => Db\RecordExists::class, + 'DbRecordExists' => Db\RecordExists::class, + 'digits' => Digits::class, + 'Digits' => Digits::class, + 'emailaddress' => EmailAddress::class, + 'EmailAddress' => EmailAddress::class, + 'explode' => Explode::class, + 'Explode' => Explode::class, + 'filecount' => File\Count::class, + 'FileCount' => File\Count::class, + 'filecrc32' => File\Crc32::class, + 'FileCrc32' => File\Crc32::class, + 'fileexcludeextension' => File\ExcludeExtension::class, + 'FileExcludeExtension' => File\ExcludeExtension::class, + 'fileexcludemimetype' => File\ExcludeMimeType::class, + 'FileExcludeMimeType' => File\ExcludeMimeType::class, + 'fileexists' => File\Exists::class, + 'FileExists' => File\Exists::class, + 'fileextension' => File\Extension::class, + 'FileExtension' => File\Extension::class, + 'filefilessize' => File\FilesSize::class, + 'FileFilesSize' => File\FilesSize::class, + 'filehash' => File\Hash::class, + 'FileHash' => File\Hash::class, + 'fileimagesize' => File\ImageSize::class, + 'FileImageSize' => File\ImageSize::class, + 'fileiscompressed' => File\IsCompressed::class, + 'FileIsCompressed' => File\IsCompressed::class, + 'fileisimage' => File\IsImage::class, + 'FileIsImage' => File\IsImage::class, + 'filemd5' => File\Md5::class, + 'FileMd5' => File\Md5::class, + 'filemimetype' => File\MimeType::class, + 'FileMimeType' => File\MimeType::class, + 'filenotexists' => File\NotExists::class, + 'FileNotExists' => File\NotExists::class, + 'filesha1' => File\Sha1::class, + 'FileSha1' => File\Sha1::class, + 'filesize' => File\Size::class, + 'FileSize' => File\Size::class, + 'fileupload' => File\Upload::class, + 'FileUpload' => File\Upload::class, + 'fileuploadfile' => File\UploadFile::class, + 'FileUploadFile' => File\UploadFile::class, + 'filewordcount' => File\WordCount::class, + 'FileWordCount' => File\WordCount::class, + 'float' => Zend\I18n\Validator\IsFloat::class, + 'Float' => Zend\I18n\Validator\IsFloat::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, + 'int' => Zend\I18n\Validator\IsInt::class, + 'Int' => Zend\I18n\Validator\IsInt::class, + 'ip' => Ip::class, + 'Ip' => Ip::class, + 'isbn' => Isbn::class, + 'Isbn' => Isbn::class, + 'isfloat' => Zend\I18n\Validator\IsFloat::class, + 'IsFloat' => Zend\I18n\Validator\IsFloat::class, + 'isinstanceof' => IsInstanceOf::class, + 'IsInstanceOf' => IsInstanceOf::class, + 'isint' => Zend\I18n\Validator\IsInt::class, + 'IsInt' => Zend\I18n\Validator\IsInt::class, + 'lessthan' => LessThan::class, + 'LessThan' => LessThan::class, + 'notempty' => NotEmpty::class, + 'NotEmpty' => NotEmpty::class, + 'phonenumber' => Zend\I18n\Validator\PhoneNumber::class, + 'PhoneNumber' => Zend\I18n\Validator\PhoneNumber::class, + 'postcode' => Zend\I18n\Validator\PostCode::class, + 'PostCode' => Zend\I18n\Validator\PostCode::class, + 'regex' => Regex::class, + 'Regex' => Regex::class, + 'sitemapchangefreq' => Sitemap\Changefreq::class, + 'SitemapChangefreq' => Sitemap\Changefreq::class, + 'sitemaplastmod' => Sitemap\Lastmod::class, + 'SitemapLastmod' => Sitemap\Lastmod::class, + 'sitemaploc' => Sitemap\Loc::class, + 'SitemapLoc' => Sitemap\Loc::class, + 'sitemappriority' => Sitemap\Priority::class, + 'SitemapPriority' => Sitemap\Priority::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, + // old aliases + Zend\I18n\Validator\Float::class => Zend\I18n\Validator\IsFloat::class, + Zend\I18n\Validator\Int::class => Zend\I18n\Validator\IsInt::class, ]; /** - * Default set of validators + * Default set of factories * * @var array */ - protected $invokableClasses = [ - 'alnum' => 'Zend\I18n\Validator\Alnum', - 'alpha' => 'Zend\I18n\Validator\Alpha', - 'barcodecode25interleaved' => 'Zend\Validator\Barcode\Code25interleaved', - 'barcodecode25' => 'Zend\Validator\Barcode\Code25', - 'barcodecode39ext' => 'Zend\Validator\Barcode\Code39ext', - 'barcodecode39' => 'Zend\Validator\Barcode\Code39', - 'barcodecode93ext' => 'Zend\Validator\Barcode\Code93ext', - 'barcodecode93' => 'Zend\Validator\Barcode\Code93', - 'barcodeean12' => 'Zend\Validator\Barcode\Ean12', - 'barcodeean13' => 'Zend\Validator\Barcode\Ean13', - 'barcodeean14' => 'Zend\Validator\Barcode\Ean14', - 'barcodeean18' => 'Zend\Validator\Barcode\Ean18', - 'barcodeean2' => 'Zend\Validator\Barcode\Ean2', - 'barcodeean5' => 'Zend\Validator\Barcode\Ean5', - 'barcodeean8' => 'Zend\Validator\Barcode\Ean8', - 'barcodegtin12' => 'Zend\Validator\Barcode\Gtin12', - 'barcodegtin13' => 'Zend\Validator\Barcode\Gtin13', - 'barcodegtin14' => 'Zend\Validator\Barcode\Gtin14', - 'barcodeidentcode' => 'Zend\Validator\Barcode\Identcode', - 'barcodeintelligentmail' => 'Zend\Validator\Barcode\Intelligentmail', - 'barcodeissn' => 'Zend\Validator\Barcode\Issn', - 'barcodeitf14' => 'Zend\Validator\Barcode\Itf14', - 'barcodeleitcode' => 'Zend\Validator\Barcode\Leitcode', - 'barcodeplanet' => 'Zend\Validator\Barcode\Planet', - 'barcodepostnet' => 'Zend\Validator\Barcode\Postnet', - 'barcoderoyalmail' => 'Zend\Validator\Barcode\Royalmail', - 'barcodesscc' => 'Zend\Validator\Barcode\Sscc', - 'barcodeupca' => 'Zend\Validator\Barcode\Upca', - 'barcodeupce' => 'Zend\Validator\Barcode\Upce', - 'barcode' => 'Zend\Validator\Barcode', - 'between' => 'Zend\Validator\Between', - 'bitwise' => 'Zend\Validator\Bitwise', - 'callback' => 'Zend\Validator\Callback', - 'creditcard' => 'Zend\Validator\CreditCard', - 'csrf' => 'Zend\Validator\Csrf', - 'date' => 'Zend\Validator\Date', - 'datestep' => 'Zend\Validator\DateStep', - 'datetime' => 'Zend\I18n\Validator\DateTime', - 'dbnorecordexists' => 'Zend\Validator\Db\NoRecordExists', - 'dbrecordexists' => 'Zend\Validator\Db\RecordExists', - 'digits' => 'Zend\Validator\Digits', - 'emailaddress' => 'Zend\Validator\EmailAddress', - 'explode' => 'Zend\Validator\Explode', - 'filecount' => 'Zend\Validator\File\Count', - 'filecrc32' => 'Zend\Validator\File\Crc32', - 'fileexcludeextension' => 'Zend\Validator\File\ExcludeExtension', - 'fileexcludemimetype' => 'Zend\Validator\File\ExcludeMimeType', - 'fileexists' => 'Zend\Validator\File\Exists', - 'fileextension' => 'Zend\Validator\File\Extension', - 'filefilessize' => 'Zend\Validator\File\FilesSize', - 'filehash' => 'Zend\Validator\File\Hash', - 'fileimagesize' => 'Zend\Validator\File\ImageSize', - 'fileiscompressed' => 'Zend\Validator\File\IsCompressed', - 'fileisimage' => 'Zend\Validator\File\IsImage', - 'filemd5' => 'Zend\Validator\File\Md5', - 'filemimetype' => 'Zend\Validator\File\MimeType', - 'filenotexists' => 'Zend\Validator\File\NotExists', - 'filesha1' => 'Zend\Validator\File\Sha1', - 'filesize' => 'Zend\Validator\File\Size', - 'fileupload' => 'Zend\Validator\File\Upload', - 'fileuploadfile' => 'Zend\Validator\File\UploadFile', - 'filewordcount' => 'Zend\Validator\File\WordCount', - 'float' => 'Zend\I18n\Validator\IsFloat', - 'greaterthan' => 'Zend\Validator\GreaterThan', - 'hex' => 'Zend\Validator\Hex', - 'hostname' => 'Zend\Validator\Hostname', - 'iban' => 'Zend\Validator\Iban', - 'identical' => 'Zend\Validator\Identical', - 'inarray' => 'Zend\Validator\InArray', - 'int' => 'Zend\I18n\Validator\IsInt', - 'ip' => 'Zend\Validator\Ip', - 'isbn' => 'Zend\Validator\Isbn', - 'isfloat' => 'Zend\I18n\Validator\IsFloat', - 'isinstanceof' => 'Zend\Validator\IsInstanceOf', - 'isint' => 'Zend\I18n\Validator\IsInt', - 'lessthan' => 'Zend\Validator\LessThan', - 'notempty' => 'Zend\Validator\NotEmpty', - 'phonenumber' => 'Zend\I18n\Validator\PhoneNumber', - 'postcode' => 'Zend\I18n\Validator\PostCode', - 'regex' => 'Zend\Validator\Regex', - 'sitemapchangefreq' => 'Zend\Validator\Sitemap\Changefreq', - 'sitemaplastmod' => 'Zend\Validator\Sitemap\Lastmod', - 'sitemaploc' => 'Zend\Validator\Sitemap\Loc', - 'sitemappriority' => 'Zend\Validator\Sitemap\Priority', - 'stringlength' => 'Zend\Validator\StringLength', - 'step' => 'Zend\Validator\Step', - 'timezone' => 'Zend\Validator\Timezone', - 'uri' => 'Zend\Validator\Uri', + protected $factories = [ + Zend\I18n\Validator\Alnum::class => InvokableFactory::class, + Zend\I18n\Validator\Alpha::class => InvokableFactory::class, + Barcode\Code25interleaved::class => InvokableFactory::class, + Barcode\Code25::class => InvokableFactory::class, + Barcode\Code39ext::class => InvokableFactory::class, + Barcode\Code39::class => InvokableFactory::class, + Barcode\Code93ext::class => InvokableFactory::class, + Barcode\Code93::class => InvokableFactory::class, + Barcode\Ean12::class => InvokableFactory::class, + Barcode\Ean13::class => InvokableFactory::class, + Barcode\Ean14::class => InvokableFactory::class, + Barcode\Ean18::class => InvokableFactory::class, + Barcode\Ean2::class => InvokableFactory::class, + Barcode\Ean5::class => InvokableFactory::class, + Barcode\Ean8::class => InvokableFactory::class, + Barcode\Gtin12::class => InvokableFactory::class, + Barcode\Gtin13::class => InvokableFactory::class, + Barcode\Gtin14::class => InvokableFactory::class, + Barcode\Identcode::class => InvokableFactory::class, + Barcode\Intelligentmail::class => InvokableFactory::class, + Barcode\Issn::class => InvokableFactory::class, + Barcode\Itf14::class => InvokableFactory::class, + Barcode\Leitcode::class => InvokableFactory::class, + Barcode\Planet::class => InvokableFactory::class, + Barcode\Postnet::class => InvokableFactory::class, + Barcode\Royalmail::class => InvokableFactory::class, + Barcode\Sscc::class => InvokableFactory::class, + Barcode\Upca::class => InvokableFactory::class, + Barcode\Upce::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, + Zend\I18n\Validator\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, + Zend\I18n\Validator\IsFloat::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, + Zend\I18n\Validator\IsInt::class => InvokableFactory::class, + Ip::class => InvokableFactory::class, + Isbn::class => InvokableFactory::class, + Zend\I18n\Validator\IsFloat::class => InvokableFactory::class, + IsInstanceOf::class => InvokableFactory::class, + Zend\I18n\Validator\IsInt::class => InvokableFactory::class, + LessThan::class => InvokableFactory::class, + NotEmpty::class => InvokableFactory::class, + Zend\I18n\Validator\PhoneNumber::class => InvokableFactory::class, + Zend\I18n\Validator\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, ]; /** @@ -125,7 +303,14 @@ class ValidatorPluginManager extends AbstractPluginManager * * @var bool */ - protected $shareByDefault = false; + protected $sharedByDefault = false; + + /** + * Default instance type + * + * @var string + */ + protected $instanceOf = ValidatorInterface::class; /** * Constructor @@ -133,11 +318,12 @@ class ValidatorPluginManager extends AbstractPluginManager * After invoking parent constructor, add an initializer to inject the * attached translator, if any, to the currently requested helper. * - * @param null|ConfigInterface $configuration + * @param ContainerInterface $parentLocator + * @param array $config */ - public function __construct(ConfigInterface $configuration = null) + public function __construct(ContainerInterface $parentLocator, array $config = []) { - parent::__construct($configuration); + parent::__construct($parentLocator, $config); $this->addInitializer([$this, 'injectTranslator']); $this->addInitializer([$this, 'injectValidatorPluginManager']); } @@ -145,13 +331,13 @@ public function __construct(ConfigInterface $configuration = null) /** * Inject a validator instance with the registered translator * + * @param ContainerInterface $locator * @param ValidatorInterface $validator * @return void */ - public function injectTranslator($validator) + public function injectTranslator(ContainerInterface $locator, $validator) { if ($validator instanceof Translator\TranslatorAwareInterface) { - $locator = $this->getServiceLocator(); if ($locator && $locator->has('MvcTranslator')) { $validator->setTranslator($locator->get('MvcTranslator')); } @@ -161,36 +347,14 @@ public function injectTranslator($validator) /** * Inject a validator plugin manager * - * @param $validator + * @param ContainerInterface $locator + * @param $validator * @return void */ - public function injectValidatorPluginManager($validator) + public function injectValidatorPluginManager(ContainerInterface $locator, $validator) { if ($validator instanceof ValidatorPluginManagerAwareInterface) { $validator->setValidatorPluginManager($this); } } - - /** - * Validate the plugin - * - * Checks that the validator loaded is an instance of ValidatorInterface. - * - * @param mixed $plugin - * @return void - * @throws Exception\RuntimeException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof ValidatorInterface) { - // we're okay - return; - } - - throw new Exception\RuntimeException(sprintf( - 'Plugin of type %s is invalid; must implement %s\ValidatorInterface', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } } diff --git a/test/StaticValidatorTest.php b/test/StaticValidatorTest.php index b0ddd0a14..226b63641 100644 --- a/test/StaticValidatorTest.php +++ b/test/StaticValidatorTest.php @@ -116,14 +116,14 @@ public function testLazyLoadsValidatorPluginManagerByDefault() public function testCanSetCustomPluginManager() { - $plugins = new ValidatorPluginManager(); + $plugins = new ValidatorPluginManager($this->getMockBuilder('Zend\ServiceManager\ServiceManager')->getMock()); StaticValidator::setPluginManager($plugins); $this->assertSame($plugins, StaticValidator::getPluginManager()); } public function testPassingNullWhenSettingPluginManagerResetsPluginManager() { - $plugins = new ValidatorPluginManager(); + $plugins = new ValidatorPluginManager($this->getMockBuilder('Zend\ServiceManager\ServiceManager')->getMock()); StaticValidator::setPluginManager($plugins); $this->assertSame($plugins, StaticValidator::getPluginManager()); StaticValidator::setPluginManager(null); @@ -133,10 +133,10 @@ public function testPassingNullWhenSettingPluginManagerResetsPluginManager() public function parameterizedData() { return [ - 'valid-positive-range' => [5, 'Between', ['min' => 1, 'max' => 10], true], - 'valid-negative-range' => [-5, 'Between', ['min' => -10, 'max' => -1], true], - 'invalid-positive-range' => [-5, 'Between', ['min' => 1, 'max' => 10], false], - 'invalid-negative-range' => [5, 'Between', ['min' => -10, 'max' => -1], false], + 'valid-positive-range' => [5, 'between', ['min' => 1, 'max' => 10], true], + 'valid-negative-range' => [-5, 'between', ['min' => -10, 'max' => -1], true], + 'invalid-positive-range' => [-5, 'between', ['min' => 1, 'max' => 10], false], + 'invalid-negative-range' => [5, 'between', ['min' => -10, 'max' => -1], false], ]; } @@ -151,8 +151,8 @@ public function testExecuteValidWithParameters($value, $validator, $options, $ex public function invalidParameterizedData() { return [ - 'positive-range' => [5, 'Between', [1, 10]], - 'negative-range' => [-5, 'Between', [-10, -1]], + 'positive-range' => [5, 'between', [1, 10]], + 'negative-range' => [-5, 'between', [-10, -1]], ]; } diff --git a/test/ValidatorPluginManagerTest.php b/test/ValidatorPluginManagerTest.php index 6aee0cc52..99296d4a7 100644 --- a/test/ValidatorPluginManagerTest.php +++ b/test/ValidatorPluginManagerTest.php @@ -10,6 +10,7 @@ namespace ZendTest\Validator; use Zend\Validator\ValidatorPluginManager; +use Zend\ServiceManager\ServiceManager; /** * @group Zend_Validator @@ -18,7 +19,7 @@ class ValidatorPluginManagerTest extends \PHPUnit_Framework_TestCase { public function setUp() { - $this->validators = new ValidatorPluginManager(); + $this->validators = new ValidatorPluginManager(new ServiceManager); } public function testAllowsInjectingTranslator() @@ -35,11 +36,10 @@ public function testAllowsInjectingTranslator() ->with($this->equalTo('MvcTranslator')) ->will($this->returnValue(true)); - $this->validators->setServiceLocator($serviceLocator); - $this->assertSame($serviceLocator, $this->validators->getServiceLocator()); + $validators = new ValidatorPluginManager($serviceLocator); - $validator = $this->validators->get('notempty'); - $this->assertSame($translator, $validator->getTranslator()); + $validator = $validators->get('notempty'); + $this->assertEquals($translator, $validator->getTranslator()); } public function testNoTranslatorInjectedWhenTranslatorIsNotPresent() @@ -50,23 +50,23 @@ public function testNoTranslatorInjectedWhenTranslatorIsNotPresent() ->with($this->equalTo('MvcTranslator')) ->will($this->returnValue(false)); - $this->validators->setServiceLocator($serviceLocator); - $this->assertSame($serviceLocator, $this->validators->getServiceLocator()); + $validators = new ValidatorPluginManager($serviceLocator); - $validator = $this->validators->get('notempty'); + $validator = $validators->get('notempty'); $this->assertNull($validator->getTranslator()); } public function testRegisteringInvalidValidatorRaisesException() { - $this->setExpectedException('Zend\Validator\Exception\RuntimeException'); + $this->setExpectedException('Zend\ServiceManager\Exception\InvalidServiceException'); $this->validators->setService('test', $this); + $this->validators->get('test'); } public function testLoadingInvalidValidatorRaisesException() { $this->validators->setInvokableClass('test', get_class($this)); - $this->setExpectedException('Zend\Validator\Exception\RuntimeException'); + $this->setExpectedException('Zend\ServiceManager\Exception\InvalidServiceException'); $this->validators->get('test'); } From 527f7856ee21d627488106e60f68310b9a35366a Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 7 Jan 2016 13:35:10 -0600 Subject: [PATCH 2/4] Minor additions - Added more aliases (primarily camelCase variants of TitleCase names). - Added initializers to the config array before passing to the constructor; cheaper operation. --- src/ValidatorPluginManager.php | 130 ++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 33 deletions(-) diff --git a/src/ValidatorPluginManager.php b/src/ValidatorPluginManager.php index e67cc2dd5..cb2fb0117 100644 --- a/src/ValidatorPluginManager.php +++ b/src/ValidatorPluginManager.php @@ -9,9 +9,10 @@ namespace Zend\Validator; +use Interop\Container\ContainerInterface; use Zend\ServiceManager\AbstractPluginManager; use Zend\ServiceManager\Factory\InvokableFactory; -use Interop\Container\ContainerInterface; +use Zend\I18n\Validator as I18nValidator; class ValidatorPluginManager extends AbstractPluginManager { @@ -21,63 +22,90 @@ class ValidatorPluginManager extends AbstractPluginManager * @var array */ protected $aliases = [ - 'alnum' => Zend\I18n\Validator\Alnum::class, - 'Alnum' => Zend\I18n\Validator\Alnum::class, - 'alpha' => Zend\I18n\Validator\Alpha::class, - 'Alpha' => Zend\I18n\Validator\Alpha::class, + 'alnum' => I18nValidator\Alnum::class, + 'Alnum' => I18nValidator\Alnum::class, + 'alpha' => I18nValidator\Alpha::class, + 'Alpha' => I18nValidator\Alpha::class, 'barcodecode25interleaved' => Barcode\Code25interleaved::class, + 'barcodeCode25interleaved' => Barcode\Code25interleaved::class, 'BarcodeCode25interleaved' => Barcode\Code25interleaved::class, 'barcodecode25' => Barcode\Code25::class, + 'barcodeCode25' => Barcode\Code25::class, 'BarcodeCode25' => Barcode\Code25::class, 'barcodecode39ext' => Barcode\Code39ext::class, + 'barcodeCode39ext' => Barcode\Code39ext::class, 'BarcodeCode39ext' => Barcode\Code39ext::class, 'barcodecode39' => Barcode\Code39::class, + 'barcodeCode39' => Barcode\Code39::class, 'BarcodeCode39' => Barcode\Code39::class, 'barcodecode93ext' => Barcode\Code93ext::class, + 'barcodeCode93ext' => Barcode\Code93ext::class, 'BarcodeCode93ext' => Barcode\Code93ext::class, 'barcodecode93' => Barcode\Code93::class, + 'barcodeCode93' => Barcode\Code93::class, 'BarcodeCode93' => Barcode\Code93::class, 'barcodeean12' => Barcode\Ean12::class, + 'barcodeEan12' => Barcode\Ean12::class, 'BarcodeEan12' => Barcode\Ean12::class, 'barcodeean13' => Barcode\Ean13::class, + 'barcodeEan13' => Barcode\Ean13::class, 'BarcodeEan13' => Barcode\Ean13::class, 'barcodeean14' => Barcode\Ean14::class, + 'barcodeEan14' => Barcode\Ean14::class, 'BarcodeEan14' => Barcode\Ean14::class, 'barcodeean18' => Barcode\Ean18::class, + 'barcodeEan18' => Barcode\Ean18::class, 'BarcodeEan18' => Barcode\Ean18::class, 'barcodeean2' => Barcode\Ean2::class, + 'barcodeEan2' => Barcode\Ean2::class, 'BarcodeEan2' => Barcode\Ean2::class, 'barcodeean5' => Barcode\Ean5::class, + 'barcodeEan5' => Barcode\Ean5::class, 'BarcodeEan5' => Barcode\Ean5::class, 'barcodeean8' => Barcode\Ean8::class, + 'barcodeEan8' => Barcode\Ean8::class, 'BarcodeEan8' => Barcode\Ean8::class, 'barcodegtin12' => Barcode\Gtin12::class, + 'barcodeGtin12' => Barcode\Gtin12::class, 'BarcodeGtin12' => Barcode\Gtin12::class, 'barcodegtin13' => Barcode\Gtin13::class, + 'barcodeGtin13' => Barcode\Gtin13::class, 'BarcodeGtin13' => Barcode\Gtin13::class, 'barcodegtin14' => Barcode\Gtin14::class, + 'barcodeGtin14' => Barcode\Gtin14::class, 'BarcodeGtin14' => Barcode\Gtin14::class, 'barcodeidentcode' => Barcode\Identcode::class, + 'barcodeIdentcode' => Barcode\Identcode::class, 'BarcodeIdentcode' => Barcode\Identcode::class, 'barcodeintelligentmail' => Barcode\Intelligentmail::class, + 'barcodeIntelligentmail' => Barcode\Intelligentmail::class, 'BarcodeIntelligentmail' => Barcode\Intelligentmail::class, 'barcodeissn' => Barcode\Issn::class, + 'barcodeIssn' => Barcode\Issn::class, 'BarcodeIssn' => Barcode\Issn::class, 'barcodeitf14' => Barcode\Itf14::class, + 'barcodeItf14' => Barcode\Itf14::class, 'BarcodeItf14' => Barcode\Itf14::class, 'barcodeleitcode' => Barcode\Leitcode::class, + 'barcodeleItcode' => Barcode\Leitcode::class, 'BarcodeleItcode' => Barcode\Leitcode::class, 'barcodeplanet' => Barcode\Planet::class, + 'barcodePlanet' => Barcode\Planet::class, 'BarcodePlanet' => Barcode\Planet::class, 'barcodepostnet' => Barcode\Postnet::class, + 'barcodePostnet' => Barcode\Postnet::class, 'BarcodePostnet' => Barcode\Postnet::class, 'barcoderoyalmail' => Barcode\Royalmail::class, + 'barcodeRoyalmail' => Barcode\Royalmail::class, 'BarcodeRoyalmail' => Barcode\Royalmail::class, 'barcodesscc' => Barcode\Sscc::class, + 'barcodeSscc' => Barcode\Sscc::class, 'BarcodeSscc' => Barcode\Sscc::class, 'barcodeupca' => Barcode\Upca::class, + 'barcodeUpca' => Barcode\Upca::class, 'BarcodeUpca' => Barcode\Upca::class, 'barcodeupce' => Barcode\Upce::class, + 'barcodeUpce' => Barcode\Upce::class, 'BarcodeUpce' => Barcode\Upce::class, 'barcode' => Barcode::class, 'Barcode' => Barcode::class, @@ -88,66 +116,92 @@ class ValidatorPluginManager extends AbstractPluginManager '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' => Zend\I18n\Validator\DateTime::class, - 'DateTime' => Zend\I18n\Validator\DateTime::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' => Zend\I18n\Validator\IsFloat::class, - 'Float' => Zend\I18n\Validator\IsFloat::class, + 'float' => I18nValidator\IsFloat::class, + 'Float' => I18nValidator\IsFloat::class, 'greaterthan' => GreaterThan::class, + 'greaterThan' => GreaterThan::class, 'GreaterThan' => GreaterThan::class, 'hex' => Hex::class, 'Hex' => Hex::class, @@ -158,38 +212,51 @@ class ValidatorPluginManager extends AbstractPluginManager 'identical' => Identical::class, 'Identical' => Identical::class, 'inarray' => InArray::class, + 'inArray' => InArray::class, 'InArray' => InArray::class, - 'int' => Zend\I18n\Validator\IsInt::class, - 'Int' => Zend\I18n\Validator\IsInt::class, + 'int' => I18nValidator\IsInt::class, + 'Int' => I18nValidator\IsInt::class, 'ip' => Ip::class, 'Ip' => Ip::class, 'isbn' => Isbn::class, 'Isbn' => Isbn::class, - 'isfloat' => Zend\I18n\Validator\IsFloat::class, - 'IsFloat' => Zend\I18n\Validator\IsFloat::class, + 'isfloat' => I18nValidator\IsFloat::class, + 'isFloat' => I18nValidator\IsFloat::class, + 'IsFloat' => I18nValidator\IsFloat::class, 'isinstanceof' => IsInstanceOf::class, + 'isInstanceOf' => IsInstanceOf::class, 'IsInstanceOf' => IsInstanceOf::class, - 'isint' => Zend\I18n\Validator\IsInt::class, - 'IsInt' => Zend\I18n\Validator\IsInt::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' => Zend\I18n\Validator\PhoneNumber::class, - 'PhoneNumber' => Zend\I18n\Validator\PhoneNumber::class, - 'postcode' => Zend\I18n\Validator\PostCode::class, - 'PostCode' => Zend\I18n\Validator\PostCode::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, @@ -197,9 +264,6 @@ class ValidatorPluginManager extends AbstractPluginManager 'Timezone' => Timezone::class, 'uri' => Uri::class, 'Uri' => Uri::class, - // old aliases - Zend\I18n\Validator\Float::class => Zend\I18n\Validator\IsFloat::class, - Zend\I18n\Validator\Int::class => Zend\I18n\Validator\IsInt::class, ]; /** @@ -208,8 +272,8 @@ class ValidatorPluginManager extends AbstractPluginManager * @var array */ protected $factories = [ - Zend\I18n\Validator\Alnum::class => InvokableFactory::class, - Zend\I18n\Validator\Alpha::class => InvokableFactory::class, + I18nValidator\Alnum::class => InvokableFactory::class, + I18nValidator\Alpha::class => InvokableFactory::class, Barcode\Code25interleaved::class => InvokableFactory::class, Barcode\Code25::class => InvokableFactory::class, Barcode\Code39ext::class => InvokableFactory::class, @@ -245,7 +309,7 @@ class ValidatorPluginManager extends AbstractPluginManager Csrf::class => InvokableFactory::class, DateStep::class => InvokableFactory::class, Date::class => InvokableFactory::class, - Zend\I18n\Validator\DateTime::class => InvokableFactory::class, + I18nValidator\DateTime::class => InvokableFactory::class, Db\NoRecordExists::class => InvokableFactory::class, Db\RecordExists::class => InvokableFactory::class, Digits::class => InvokableFactory::class, @@ -270,23 +334,23 @@ class ValidatorPluginManager extends AbstractPluginManager File\Upload::class => InvokableFactory::class, File\UploadFile::class => InvokableFactory::class, File\WordCount::class => InvokableFactory::class, - Zend\I18n\Validator\IsFloat::class => InvokableFactory::class, + I18nValidator\IsFloat::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, - Zend\I18n\Validator\IsInt::class => InvokableFactory::class, + I18nValidator\IsInt::class => InvokableFactory::class, Ip::class => InvokableFactory::class, Isbn::class => InvokableFactory::class, - Zend\I18n\Validator\IsFloat::class => InvokableFactory::class, + I18nValidator\IsFloat::class => InvokableFactory::class, IsInstanceOf::class => InvokableFactory::class, - Zend\I18n\Validator\IsInt::class => InvokableFactory::class, + I18nValidator\IsInt::class => InvokableFactory::class, LessThan::class => InvokableFactory::class, NotEmpty::class => InvokableFactory::class, - Zend\I18n\Validator\PhoneNumber::class => InvokableFactory::class, - Zend\I18n\Validator\PostCode::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, @@ -323,9 +387,9 @@ class ValidatorPluginManager extends AbstractPluginManager */ public function __construct(ContainerInterface $parentLocator, array $config = []) { + $config['initializers'][] = [$this, 'injectTranslator']; + $config['initializers'][] = [$this, 'injectValidatorPluginManager']; parent::__construct($parentLocator, $config); - $this->addInitializer([$this, 'injectTranslator']); - $this->addInitializer([$this, 'injectValidatorPluginManager']); } /** From 6ba220449ac3b316579c12f81606a91adf658721 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 7 Jan 2016 13:45:26 -0600 Subject: [PATCH 3/4] Implemented validate, validatePlugin - To prepare this for a v2 forwards-compat release, implemented the `validate()` (v3) and `validatePlugin()` (v2) methods. The latter proxies to the former, allowing us to remove it in a future version that pins only against SM v3. --- src/ValidatorPluginManager.php | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/ValidatorPluginManager.php b/src/ValidatorPluginManager.php index cb2fb0117..16d07418e 100644 --- a/src/ValidatorPluginManager.php +++ b/src/ValidatorPluginManager.php @@ -11,6 +11,7 @@ use Interop\Container\ContainerInterface; use Zend\ServiceManager\AbstractPluginManager; +use Zend\ServiceManager\Exception\InvalidServiceException; use Zend\ServiceManager\Factory\InvokableFactory; use Zend\I18n\Validator as I18nValidator; @@ -392,6 +393,36 @@ public function __construct(ContainerInterface $parentLocator, array $config = [ parent::__construct($parentLocator, $config); } + /** + * Validate plugin instance + * + * {@inheritDoc} + */ + public function validate($instance) + { + if (! $instance 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($instance) ? get_class($instance) : gettype($instance)) + )); + } + } + + /** + * For v2 compatibility: validate plugin instance. + * + * Proxies to `validate()`. + * + * @param mixed $instance + * @throws InvalidServiceException + */ + public function validatePlugin($instance) + { + $this->validate($instance); + } + /** * Inject a validator instance with the registered translator * From d98d263901d84bf6ff444256891acf27eaf2e59d Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 7 Jan 2016 14:03:29 -0600 Subject: [PATCH 4/4] Added CHANGELOG for #49 --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ac9fdfdb..eb2f803b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,8 @@ All notable changes to this project will be documented in this file, in reverse ### Fixed -- Nothing. +- [#49](https://github.com/zendframework/zend-validator/pull/49) updates the + code to work with the upcoming zend-servicemanager v3. ## 2.5.4 - TBD