Skip to content
This repository was archived by the owner on Jan 31, 2020. It is now read-only.

Commit 6efb07b

Browse files
committed
Ensure backwards compatibility with v2
ValidatorPluginManager: - Removed all barcode adapters from aliases and factories; these are not actual validators, but consumed by the barcode validator. - Used `$plugin` terminology over `$instance` for validation. - Modified `validatePlugin()` to throw v2 exception. - Added factory entries using normalized names to ensure BC with v2. - Used `$container` verbiage over `$locator` verbiage. - Updated `injectTranslator` to check if being used in a v2 context; if so, it pulls the translator from the parent container. - Simplified tests for translator injection verification using Prophecy. - Updated tests for expected exceptions to test for either v2 or v3 exceptions. - Added compatibility tests. StaticValidator: - Configure the "share by default" flag based on version of zend-servicemanager.
1 parent f6b89cb commit 6efb07b

File tree

4 files changed

+245
-144
lines changed

4 files changed

+245
-144
lines changed

src/StaticValidator.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ public static function setPluginManager(ValidatorPluginManager $plugins = null)
2828
{
2929
// Don't share by default to allow different arguments on subsequent calls
3030
if ($plugins instanceof ValidatorPluginManager) {
31-
$plugins->configure(['shared_by_default' => false]);
31+
// Vary how the share by default flag is set based on zend-servicemanager version
32+
if (method_exists($plugins, 'configure')) {
33+
$plugins->configure(['shared_by_default' => false]);
34+
} else {
35+
$plugins->setShareByDefault(false);
36+
}
3237
}
3338
static::$plugins = $plugins;
3439
}

src/ValidatorPluginManager.php

Lines changed: 118 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -27,87 +27,6 @@ class ValidatorPluginManager extends AbstractPluginManager
2727
'Alnum' => I18nValidator\Alnum::class,
2828
'alpha' => I18nValidator\Alpha::class,
2929
'Alpha' => I18nValidator\Alpha::class,
30-
'barcodecode25interleaved' => Barcode\Code25interleaved::class,
31-
'barcodeCode25interleaved' => Barcode\Code25interleaved::class,
32-
'BarcodeCode25interleaved' => Barcode\Code25interleaved::class,
33-
'barcodecode25' => Barcode\Code25::class,
34-
'barcodeCode25' => Barcode\Code25::class,
35-
'BarcodeCode25' => Barcode\Code25::class,
36-
'barcodecode39ext' => Barcode\Code39ext::class,
37-
'barcodeCode39ext' => Barcode\Code39ext::class,
38-
'BarcodeCode39ext' => Barcode\Code39ext::class,
39-
'barcodecode39' => Barcode\Code39::class,
40-
'barcodeCode39' => Barcode\Code39::class,
41-
'BarcodeCode39' => Barcode\Code39::class,
42-
'barcodecode93ext' => Barcode\Code93ext::class,
43-
'barcodeCode93ext' => Barcode\Code93ext::class,
44-
'BarcodeCode93ext' => Barcode\Code93ext::class,
45-
'barcodecode93' => Barcode\Code93::class,
46-
'barcodeCode93' => Barcode\Code93::class,
47-
'BarcodeCode93' => Barcode\Code93::class,
48-
'barcodeean12' => Barcode\Ean12::class,
49-
'barcodeEan12' => Barcode\Ean12::class,
50-
'BarcodeEan12' => Barcode\Ean12::class,
51-
'barcodeean13' => Barcode\Ean13::class,
52-
'barcodeEan13' => Barcode\Ean13::class,
53-
'BarcodeEan13' => Barcode\Ean13::class,
54-
'barcodeean14' => Barcode\Ean14::class,
55-
'barcodeEan14' => Barcode\Ean14::class,
56-
'BarcodeEan14' => Barcode\Ean14::class,
57-
'barcodeean18' => Barcode\Ean18::class,
58-
'barcodeEan18' => Barcode\Ean18::class,
59-
'BarcodeEan18' => Barcode\Ean18::class,
60-
'barcodeean2' => Barcode\Ean2::class,
61-
'barcodeEan2' => Barcode\Ean2::class,
62-
'BarcodeEan2' => Barcode\Ean2::class,
63-
'barcodeean5' => Barcode\Ean5::class,
64-
'barcodeEan5' => Barcode\Ean5::class,
65-
'BarcodeEan5' => Barcode\Ean5::class,
66-
'barcodeean8' => Barcode\Ean8::class,
67-
'barcodeEan8' => Barcode\Ean8::class,
68-
'BarcodeEan8' => Barcode\Ean8::class,
69-
'barcodegtin12' => Barcode\Gtin12::class,
70-
'barcodeGtin12' => Barcode\Gtin12::class,
71-
'BarcodeGtin12' => Barcode\Gtin12::class,
72-
'barcodegtin13' => Barcode\Gtin13::class,
73-
'barcodeGtin13' => Barcode\Gtin13::class,
74-
'BarcodeGtin13' => Barcode\Gtin13::class,
75-
'barcodegtin14' => Barcode\Gtin14::class,
76-
'barcodeGtin14' => Barcode\Gtin14::class,
77-
'BarcodeGtin14' => Barcode\Gtin14::class,
78-
'barcodeidentcode' => Barcode\Identcode::class,
79-
'barcodeIdentcode' => Barcode\Identcode::class,
80-
'BarcodeIdentcode' => Barcode\Identcode::class,
81-
'barcodeintelligentmail' => Barcode\Intelligentmail::class,
82-
'barcodeIntelligentmail' => Barcode\Intelligentmail::class,
83-
'BarcodeIntelligentmail' => Barcode\Intelligentmail::class,
84-
'barcodeissn' => Barcode\Issn::class,
85-
'barcodeIssn' => Barcode\Issn::class,
86-
'BarcodeIssn' => Barcode\Issn::class,
87-
'barcodeitf14' => Barcode\Itf14::class,
88-
'barcodeItf14' => Barcode\Itf14::class,
89-
'BarcodeItf14' => Barcode\Itf14::class,
90-
'barcodeleitcode' => Barcode\Leitcode::class,
91-
'barcodeleItcode' => Barcode\Leitcode::class,
92-
'BarcodeleItcode' => Barcode\Leitcode::class,
93-
'barcodeplanet' => Barcode\Planet::class,
94-
'barcodePlanet' => Barcode\Planet::class,
95-
'BarcodePlanet' => Barcode\Planet::class,
96-
'barcodepostnet' => Barcode\Postnet::class,
97-
'barcodePostnet' => Barcode\Postnet::class,
98-
'BarcodePostnet' => Barcode\Postnet::class,
99-
'barcoderoyalmail' => Barcode\Royalmail::class,
100-
'barcodeRoyalmail' => Barcode\Royalmail::class,
101-
'BarcodeRoyalmail' => Barcode\Royalmail::class,
102-
'barcodesscc' => Barcode\Sscc::class,
103-
'barcodeSscc' => Barcode\Sscc::class,
104-
'BarcodeSscc' => Barcode\Sscc::class,
105-
'barcodeupca' => Barcode\Upca::class,
106-
'barcodeUpca' => Barcode\Upca::class,
107-
'BarcodeUpca' => Barcode\Upca::class,
108-
'barcodeupce' => Barcode\Upce::class,
109-
'barcodeUpce' => Barcode\Upce::class,
110-
'BarcodeUpce' => Barcode\Upce::class,
11130
'barcode' => Barcode::class,
11231
'Barcode' => Barcode::class,
11332
'between' => Between::class,
@@ -275,33 +194,6 @@ class ValidatorPluginManager extends AbstractPluginManager
275194
protected $factories = [
276195
I18nValidator\Alnum::class => InvokableFactory::class,
277196
I18nValidator\Alpha::class => InvokableFactory::class,
278-
Barcode\Code25interleaved::class => InvokableFactory::class,
279-
Barcode\Code25::class => InvokableFactory::class,
280-
Barcode\Code39ext::class => InvokableFactory::class,
281-
Barcode\Code39::class => InvokableFactory::class,
282-
Barcode\Code93ext::class => InvokableFactory::class,
283-
Barcode\Code93::class => InvokableFactory::class,
284-
Barcode\Ean12::class => InvokableFactory::class,
285-
Barcode\Ean13::class => InvokableFactory::class,
286-
Barcode\Ean14::class => InvokableFactory::class,
287-
Barcode\Ean18::class => InvokableFactory::class,
288-
Barcode\Ean2::class => InvokableFactory::class,
289-
Barcode\Ean5::class => InvokableFactory::class,
290-
Barcode\Ean8::class => InvokableFactory::class,
291-
Barcode\Gtin12::class => InvokableFactory::class,
292-
Barcode\Gtin13::class => InvokableFactory::class,
293-
Barcode\Gtin14::class => InvokableFactory::class,
294-
Barcode\Identcode::class => InvokableFactory::class,
295-
Barcode\Intelligentmail::class => InvokableFactory::class,
296-
Barcode\Issn::class => InvokableFactory::class,
297-
Barcode\Itf14::class => InvokableFactory::class,
298-
Barcode\Leitcode::class => InvokableFactory::class,
299-
Barcode\Planet::class => InvokableFactory::class,
300-
Barcode\Postnet::class => InvokableFactory::class,
301-
Barcode\Royalmail::class => InvokableFactory::class,
302-
Barcode\Sscc::class => InvokableFactory::class,
303-
Barcode\Upca::class => InvokableFactory::class,
304-
Barcode\Upce::class => InvokableFactory::class,
305197
Barcode::class => InvokableFactory::class,
306198
Between::class => InvokableFactory::class,
307199
Bitwise::class => InvokableFactory::class,
@@ -361,6 +253,97 @@ class ValidatorPluginManager extends AbstractPluginManager
361253
Step::class => InvokableFactory::class,
362254
Timezone::class => InvokableFactory::class,
363255
Uri::class => InvokableFactory::class,
256+
257+
// v2 canonical FQCNs
258+
259+
'zendvalidatorbarcodecode25interleaved' => InvokableFactory::class,
260+
'zendvalidatorbarcodecode25' => InvokableFactory::class,
261+
'zendvalidatorbarcodecode39ext' => InvokableFactory::class,
262+
'zendvalidatorbarcodecode39' => InvokableFactory::class,
263+
'zendvalidatorbarcodecode93ext' => InvokableFactory::class,
264+
'zendvalidatorbarcodecode93' => InvokableFactory::class,
265+
'zendvalidatorbarcodeean12' => InvokableFactory::class,
266+
'zendvalidatorbarcodeean13' => InvokableFactory::class,
267+
'zendvalidatorbarcodeean14' => InvokableFactory::class,
268+
'zendvalidatorbarcodeean18' => InvokableFactory::class,
269+
'zendvalidatorbarcodeean2' => InvokableFactory::class,
270+
'zendvalidatorbarcodeean5' => InvokableFactory::class,
271+
'zendvalidatorbarcodeean8' => InvokableFactory::class,
272+
'zendvalidatorbarcodegtin12' => InvokableFactory::class,
273+
'zendvalidatorbarcodegtin13' => InvokableFactory::class,
274+
'zendvalidatorbarcodegtin14' => InvokableFactory::class,
275+
'zendvalidatorbarcodeidentcode' => InvokableFactory::class,
276+
'zendvalidatorbarcodeintelligentmail' => InvokableFactory::class,
277+
'zendvalidatorbarcodeissn' => InvokableFactory::class,
278+
'zendvalidatorbarcodeitf14' => InvokableFactory::class,
279+
'zendvalidatorbarcodeleitcode' => InvokableFactory::class,
280+
'zendvalidatorbarcodeplanet' => InvokableFactory::class,
281+
'zendvalidatorbarcodepostnet' => InvokableFactory::class,
282+
'zendvalidatorbarcoderoyalmail' => InvokableFactory::class,
283+
'zendvalidatorbarcodesscc' => InvokableFactory::class,
284+
'zendvalidatorbarcodeupca' => InvokableFactory::class,
285+
'zendvalidatorbarcodeupce' => InvokableFactory::class,
286+
'zendvalidatorbarcode' => InvokableFactory::class,
287+
'zendvalidatorbetween' => InvokableFactory::class,
288+
'zendvalidatorbitwise' => InvokableFactory::class,
289+
'zendvalidatorcallback' => InvokableFactory::class,
290+
'zendvalidatorcreditcard' => InvokableFactory::class,
291+
'zendvalidatorcsrf' => InvokableFactory::class,
292+
'zendvalidatordatestep' => InvokableFactory::class,
293+
'zendvalidatordate' => InvokableFactory::class,
294+
'zendvalidatordbnorecordexists' => InvokableFactory::class,
295+
'zendvalidatordbrecordexists' => InvokableFactory::class,
296+
'zendvalidatordigits' => InvokableFactory::class,
297+
'zendvalidatoremailaddress' => InvokableFactory::class,
298+
'zendvalidatorexplode' => InvokableFactory::class,
299+
'zendvalidatorfilecount' => InvokableFactory::class,
300+
'zendvalidatorfilecrc32' => InvokableFactory::class,
301+
'zendvalidatorfileexcludeextension' => InvokableFactory::class,
302+
'zendvalidatorfileexcludemimetype' => InvokableFactory::class,
303+
'zendvalidatorfileexists' => InvokableFactory::class,
304+
'zendvalidatorfileextension' => InvokableFactory::class,
305+
'zendvalidatorfilefilessize' => InvokableFactory::class,
306+
'zendvalidatorfilehash' => InvokableFactory::class,
307+
'zendvalidatorfileimagesize' => InvokableFactory::class,
308+
'zendvalidatorfileiscompressed' => InvokableFactory::class,
309+
'zendvalidatorfileisimage' => InvokableFactory::class,
310+
'zendvalidatorfilemd5' => InvokableFactory::class,
311+
'zendvalidatorfilemimetype' => InvokableFactory::class,
312+
'zendvalidatorfilenotexists' => InvokableFactory::class,
313+
'zendvalidatorfilesha1' => InvokableFactory::class,
314+
'zendvalidatorfilesize' => InvokableFactory::class,
315+
'zendvalidatorfileupload' => InvokableFactory::class,
316+
'zendvalidatorfileuploadfile' => InvokableFactory::class,
317+
'zendvalidatorfilewordcount' => InvokableFactory::class,
318+
'zendvalidatorgreaterthan' => InvokableFactory::class,
319+
'zendvalidatorhex' => InvokableFactory::class,
320+
'zendvalidatorhostname' => InvokableFactory::class,
321+
'zendi18nvalidatoralnum' => InvokableFactory::class,
322+
'zendi18nvalidatoralpha' => InvokableFactory::class,
323+
'zendi18nvalidatordatetime' => InvokableFactory::class,
324+
'zendi18nvalidatorisfloat' => InvokableFactory::class,
325+
'zendi18nvalidatorisint' => InvokableFactory::class,
326+
'zendi18nvalidatorisfloat' => InvokableFactory::class,
327+
'zendi18nvalidatorisint' => InvokableFactory::class,
328+
'zendi18nvalidatorphonenumber' => InvokableFactory::class,
329+
'zendi18nvalidatorpostcode' => InvokableFactory::class,
330+
'zendvalidatoriban' => InvokableFactory::class,
331+
'zendvalidatoridentical' => InvokableFactory::class,
332+
'zendvalidatorinarray' => InvokableFactory::class,
333+
'zendvalidatorip' => InvokableFactory::class,
334+
'zendvalidatorisbn' => InvokableFactory::class,
335+
'zendvalidatorisinstanceof' => InvokableFactory::class,
336+
'zendvalidatorlessthan' => InvokableFactory::class,
337+
'zendvalidatornotempty' => InvokableFactory::class,
338+
'zendvalidatorregex' => InvokableFactory::class,
339+
'zendvalidatorsitemapchangefreq' => InvokableFactory::class,
340+
'zendvalidatorsitemaplastmod' => InvokableFactory::class,
341+
'zendvalidatorsitemaploc' => InvokableFactory::class,
342+
'zendvalidatorsitemappriority' => InvokableFactory::class,
343+
'zendvalidatorstringlength' => InvokableFactory::class,
344+
'zendvalidatorstep' => InvokableFactory::class,
345+
'zendvalidatortimezone' => InvokableFactory::class,
346+
'zendvalidatoruri' => InvokableFactory::class,
364347
];
365348

366349
/**
@@ -405,14 +388,14 @@ public function __construct($configOrContainerInstance = null, array $v3config =
405388
*
406389
* {@inheritDoc}
407390
*/
408-
public function validate($instance)
391+
public function validate($plugin)
409392
{
410-
if (! $instance instanceof $this->instanceOf) {
393+
if (! $plugin instanceof $this->instanceOf) {
411394
throw new InvalidServiceException(sprintf(
412395
'%s expects only to create instances of %s; %s is invalid',
413396
get_class($this),
414397
$this->instanceOf,
415-
(is_object($instance) ? get_class($instance) : gettype($instance))
398+
(is_object($plugin) ? get_class($plugin) : gettype($plugin))
416399
));
417400
}
418401
}
@@ -422,12 +405,20 @@ public function validate($instance)
422405
*
423406
* Proxies to `validate()`.
424407
*
425-
* @param mixed $instance
426-
* @throws InvalidServiceException
408+
* @param mixed $plugin
409+
* @throws Exception\RuntimeException
427410
*/
428-
public function validatePlugin($instance)
411+
public function validatePlugin($plugin)
429412
{
430-
$this->validate($instance);
413+
try {
414+
$this->validate($plugin);
415+
} catch (InvalidServiceException $e) {
416+
throw new Exception\RuntimeException(sprintf(
417+
'Plugin of type %s is invalid; must implement %s',
418+
(is_object($plugin) ? get_class($plugin) : gettype($plugin)),
419+
ValidatorInterface::class
420+
), $e->getCode(), $e);
421+
}
431422
}
432423

433424
/**
@@ -440,15 +431,21 @@ public function validatePlugin($instance)
440431
public function injectTranslator($first, $second)
441432
{
442433
if ($first instanceof ContainerInterface) {
443-
$locator = $first;
434+
$container = $first;
444435
$validator = $second;
445436
} else {
446-
$locator = $second;
437+
$container = $second;
447438
$validator = $first;
448439
}
440+
441+
// V2 means we pull it from the parent container
442+
if ($container === $this && method_exists($container, 'getServiceLocator') && $container->getServiceLocator()) {
443+
$container = $container->getServiceLocator();
444+
}
445+
449446
if ($validator instanceof Translator\TranslatorAwareInterface) {
450-
if ($locator && $locator->has('MvcTranslator')) {
451-
$validator->setTranslator($locator->get('MvcTranslator'));
447+
if ($container && $container->has('MvcTranslator')) {
448+
$validator->setTranslator($container->get('MvcTranslator'));
452449
}
453450
}
454451
}
@@ -463,10 +460,10 @@ public function injectTranslator($first, $second)
463460
public function injectValidatorPluginManager($first, $second)
464461
{
465462
if ($first instanceof ContainerInterface) {
466-
$locator = $first;
463+
$container = $first;
467464
$validator = $second;
468465
} else {
469-
$locator = $second;
466+
$container = $second;
470467
$validator = $first;
471468
}
472469
if ($validator instanceof ValidatorPluginManagerAwareInterface) {

0 commit comments

Comments
 (0)