Use factory to create Validator, reuse AnnotationReaderProvider
[MAILPOET-2437]
This commit is contained in:
committed by
Jack Kitterhing
parent
292a96953c
commit
2bdf8643fc
@ -119,6 +119,9 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
->setPublic(true);
|
||||
$container->autowire(\MailPoet\Doctrine\EventListeners\TimestampListener::class);
|
||||
$container->autowire(\MailPoet\Doctrine\EventListeners\ValidationListener::class);
|
||||
$container->autowire(\MailPoet\Doctrine\Validator\ValidatorFactory::class);
|
||||
$container->autowire(\MailPoetVendor\Symfony\Component\Validator\Validator\ValidatorInterface::class)
|
||||
->setFactory([new Reference(\MailPoet\Doctrine\Validator\ValidatorFactory::class), 'createValidator']);
|
||||
// Dynamic segments
|
||||
$container->autowire(\MailPoet\DynamicSegments\DynamicSegmentHooks::class);
|
||||
// Cron
|
||||
|
@ -4,17 +4,14 @@ namespace MailPoet\Doctrine\EventListeners;
|
||||
|
||||
use MailPoet\Doctrine\ValidationException;
|
||||
use MailPoetVendor\Doctrine\ORM\Event\OnFlushEventArgs;
|
||||
use MailPoetVendor\Symfony\Component\Validator\Validation;
|
||||
use MailPoetVendor\Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
class ValidationListener {
|
||||
/** @var ValidatorInterface */
|
||||
private $validator;
|
||||
|
||||
function __construct() {
|
||||
$this->validator = Validation::createValidatorBuilder()
|
||||
->enableAnnotationMapping()
|
||||
->getValidator();
|
||||
function __construct(ValidatorInterface $validator) {
|
||||
$this->validator = $validator;
|
||||
}
|
||||
|
||||
function onFlush(OnFlushEventArgs $event_args) {
|
||||
|
36
lib/Doctrine/Validator/ValidatorFactory.php
Normal file
36
lib/Doctrine/Validator/ValidatorFactory.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Doctrine\Validator;
|
||||
|
||||
use MailPoet\Doctrine\Annotations\AnnotationReaderProvider;
|
||||
use MailPoet\Doctrine\MetadataCache;
|
||||
use MailPoetVendor\Symfony\Component\Validator\Mapping\Cache\DoctrineCache;
|
||||
use MailPoetVendor\Symfony\Component\Validator\Validation;
|
||||
|
||||
class ValidatorFactory {
|
||||
const METADATA_DIR = __DIR__ . '/../../../generated/validator-metadata';
|
||||
|
||||
/** @var AnnotationReaderProvider */
|
||||
private $annotation_reader_provider;
|
||||
|
||||
function __construct(AnnotationReaderProvider $annotation_reader_provider) {
|
||||
$this->annotation_reader_provider = $annotation_reader_provider;
|
||||
}
|
||||
|
||||
function createValidator() {
|
||||
$builder = Validation::createValidatorBuilder();
|
||||
|
||||
// annotation reader exists only in dev environment, on production cache is pre-generated
|
||||
$annotation_reader = $this->annotation_reader_provider->getAnnotationReader();
|
||||
if ($annotation_reader) {
|
||||
$builder->enableAnnotationMapping($annotation_reader);
|
||||
}
|
||||
|
||||
// metadata cache (for production cache is pre-generated at build time)
|
||||
$is_read_only = !$annotation_reader;
|
||||
$metadata_cache = new MetadataCache(self::METADATA_DIR, $is_read_only);
|
||||
$builder->setMetadataCache(new DoctrineCache($metadata_cache));
|
||||
|
||||
return $builder->getValidator();
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ use MailPoet\Doctrine\ConfigurationFactory;
|
||||
use MailPoet\Doctrine\EntityManagerFactory;
|
||||
use MailPoet\Doctrine\EventListeners\TimestampListener;
|
||||
use MailPoet\Doctrine\EventListeners\ValidationListener;
|
||||
use MailPoet\Doctrine\Validator\ValidatorFactory;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Doctrine\Common\Cache\ArrayCache;
|
||||
|
||||
@ -86,8 +87,9 @@ class TimestampListenerTest extends \MailPoetTest {
|
||||
$configuration->setMetadataDriverImpl($metadata_driver);
|
||||
$configuration->setMetadataCacheImpl(new ArrayCache());
|
||||
|
||||
$validator_factory = new ValidatorFactory($annotation_reader_provider);
|
||||
$timestamp_listener = new TimestampListener($this->wp);
|
||||
$validation_listener = new ValidationListener();
|
||||
$validation_listener = new ValidationListener($validator_factory->createValidator());
|
||||
$entity_manager_factory = new EntityManagerFactory($this->connection, $configuration, $timestamp_listener, $validation_listener);
|
||||
return $entity_manager_factory->createEntityManager();
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ use MailPoet\Doctrine\EntityManagerFactory;
|
||||
use MailPoet\Doctrine\EventListeners\TimestampListener;
|
||||
use MailPoet\Doctrine\EventListeners\ValidationListener;
|
||||
use MailPoet\Doctrine\ValidationException;
|
||||
use MailPoet\Doctrine\Validator\ValidatorFactory;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Doctrine\Common\Cache\ArrayCache;
|
||||
|
||||
@ -70,8 +71,9 @@ class ValidationTest extends \MailPoetTest {
|
||||
$configuration->setMetadataDriverImpl($metadata_driver);
|
||||
$configuration->setMetadataCacheImpl(new ArrayCache());
|
||||
|
||||
$validator_factory = new ValidatorFactory($annotation_reader_provider);
|
||||
$timestamp_listener = new TimestampListener($this->wp);
|
||||
$validation_listener = new ValidationListener();
|
||||
$validation_listener = new ValidationListener($validator_factory->createValidator());
|
||||
$entity_manager_factory = new EntityManagerFactory($this->connection, $configuration, $timestamp_listener, $validation_listener);
|
||||
return $entity_manager_factory->createEntityManager();
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ use MailPoet\Doctrine\ConfigurationFactory;
|
||||
use MailPoet\Doctrine\EntityManagerFactory;
|
||||
use MailPoet\Doctrine\EventListeners\TimestampListener;
|
||||
use MailPoet\Doctrine\EventListeners\ValidationListener;
|
||||
use MailPoet\Doctrine\Validator\ValidatorFactory;
|
||||
use MailPoet\Test\Doctrine\Types\JsonEntity;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Doctrine\Common\Cache\ArrayCache;
|
||||
@ -160,8 +161,9 @@ class JsonTypesTest extends \MailPoetTest {
|
||||
$configuration->setMetadataDriverImpl($metadata_driver);
|
||||
$configuration->setMetadataCacheImpl(new ArrayCache());
|
||||
|
||||
$validator_factory = new ValidatorFactory($annotation_reader_provider);
|
||||
$timestamp_listener = new TimestampListener($this->wp);
|
||||
$validation_listener = new ValidationListener();
|
||||
$validation_listener = new ValidationListener($validator_factory->createValidator());
|
||||
$entity_manager_factory = new EntityManagerFactory($this->connection, $configuration, $timestamp_listener, $validation_listener);
|
||||
return $entity_manager_factory->createEntityManager();
|
||||
}
|
||||
|
Reference in New Issue
Block a user