From 3b82cb933bb8d4656ff4e4d60da3634bf3cdbcfa Mon Sep 17 00:00:00 2001 From: Dolgov_M Date: Mon, 23 Nov 2015 11:38:10 +0300 Subject: [PATCH 1/6] add PhpDoc in code set className of configuration and mapping drivers as option remove unused variables --- .../DoctrineOrmServiceProvider.php | 138 +++++++++++------- 1 file changed, 82 insertions(+), 56 deletions(-) diff --git a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php index 8b5e53e..49ca518 100755 --- a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php +++ b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php @@ -27,12 +27,6 @@ use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\DefaultQuoteStrategy; -use Doctrine\ORM\Mapping\Driver\Driver; -use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver; -use Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver; -use Doctrine\ORM\Mapping\Driver\XmlDriver; -use Doctrine\ORM\Mapping\Driver\YamlDriver; -use Doctrine\ORM\Mapping\Driver\StaticPHPDriver; use Doctrine\ORM\Repository\DefaultRepositoryFactory; /** @@ -51,9 +45,15 @@ public function register(\Pimple $app) } $app['orm.em.default_options'] = array( - 'connection' => 'default', - 'mappings' => array(), - 'types' => array() + 'connection' => 'default', + 'mappings' => array(), + 'types' => array(), + 'class.configuration' => 'Doctrine\ORM\Configuration', + 'class.driver.yml' => 'Doctrine\ORM\Mapping\Driver\YamlDriver', + 'class.driver.simple_yml' => 'Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver', + 'class.driver.xml' => 'Doctrine\ORM\Mapping\Driver\XmlDriver', + 'class.driver.simple_xml' => 'Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver', + 'class.driver.php' => 'Doctrine\Common\Persistence\Mapping\Driver\StaticPHPDriver', ); $app['orm.ems.options.initializer'] = $app->protect(function () use ($app) { @@ -90,7 +90,7 @@ public function register(\Pimple $app) return $app['orm.ems.default']; }); - $app['orm.ems'] = $app->share(function($app) { + $app['orm.ems'] = $app->share(function(\Pimple $app) { $app['orm.ems.options.initializer'](); $ems = new \Pimple(); @@ -102,7 +102,7 @@ public function register(\Pimple $app) $config = $app['orm.ems.config'][$name]; } - $ems[$name] = $app->share(function ($ems) use ($app, $options, $config) { + $ems[$name] = $app->share(function () use ($app, $options, $config) { return EntityManager::create( $app['dbs'][$options['connection']], $config, @@ -114,12 +114,15 @@ public function register(\Pimple $app) return $ems; }); - $app['orm.ems.config'] = $app->share(function($app) { + $app['orm.ems.config'] = $app->share(function(\Pimple $app) { $app['orm.ems.options.initializer'](); $configs = new \Pimple(); foreach ($app['orm.ems.options'] as $name => $options) { - $config = new Configuration; + /** + * @var $config Configuration + */ + $config = new $options['class.configuration']; $app['orm.cache.configurer']($name, $config, $options); @@ -141,6 +144,9 @@ public function register(\Pimple $app) $config->setNamingStrategy($app['orm.strategy.naming']); $config->setQuoteStrategy($app['orm.strategy.quote']); + /** + * @var MappingDriverChain $chain + */ $chain = $app['orm.mapping_driver_chain.locator']($name); foreach ((array) $options['mappings'] as $entity) { if (!is_array($entity)) { @@ -150,46 +156,30 @@ public function register(\Pimple $app) } if (!empty($entity['resources_namespace'])) { - $entity['path'] = $app['psr0_resource_locator']->findFirstDirectory($entity['resources_namespace']); + if($app->offsetExists('psr0_resource_locator')) { + $entity['path'] = $app['psr0_resource_locator']->findFirstDirectory($entity['resources_namespace']); + } else { + throw new \InvalidArgumentException('Not exist psr0_resource_locator'); + } } if (isset($entity['alias'])) { $config->addEntityNamespace($entity['alias'], $entity['namespace']); } - switch ($entity['type']) { - case 'annotation': - $useSimpleAnnotationReader = - isset($entity['use_simple_annotation_reader']) - ? $entity['use_simple_annotation_reader'] - : true; - $driver = $config->newDefaultAnnotationDriver((array) $entity['path'], $useSimpleAnnotationReader); - $chain->addDriver($driver, $entity['namespace']); - break; - case 'yml': - $driver = new YamlDriver($entity['path']); - $chain->addDriver($driver, $entity['namespace']); - break; - case 'simple_yml': - $driver = new SimplifiedYamlDriver(array($entity['path'] => $entity['namespace'])); - $chain->addDriver($driver, $entity['namespace']); - break; - case 'xml': - $driver = new XmlDriver($entity['path']); - $chain->addDriver($driver, $entity['namespace']); - break; - case 'simple_xml': - $driver = new SimplifiedXmlDriver(array($entity['path'] => $entity['namespace'])); - $chain->addDriver($driver, $entity['namespace']); - break; - case 'php': - $driver = new StaticPHPDriver($entity['path']); - $chain->addDriver($driver, $entity['namespace']); - break; - default: + if('annotation' === $entity['type']){ + $useSimpleAnnotationReader = isset($entity['use_simple_annotation_reader']) + ? $entity['use_simple_annotation_reader'] + : true; + $driver = $config->newDefaultAnnotationDriver((array) $entity['path'], $useSimpleAnnotationReader); + } else { + if( isset($app['orm.driver.'.$entity['type']]) ) { + $driver = $app['orm.driver.'.$entity['type']]( $options, $entity ); + } else { throw new \InvalidArgumentException(sprintf('"%s" is not a recognized driver', $entity['type'])); - break; + } } + $chain->addDriver($driver, $entity['namespace']); } $config->setMetadataDriverImpl($chain); @@ -207,6 +197,31 @@ public function register(\Pimple $app) return $configs; }); + $app['orm.driver.yml'] = $app->share(function ($options, $entity) { + $className = $options['class.driver.yml']; + return new $className($entity['path']); + }); + + $app['orm.driver.simple_yml'] = $app->share(function ($options, $entity) { + $className = $options['class.driver.simple_yml']; + return new $className( array($entity['path'] => $entity['namespace']) ); + }); + + $app['orm.driver.xml'] = $app->share(function ($options, $entity) { + $className = $options['class.driver.xml']; + return new $className($entity['path']); + }); + + $app['orm.driver.simple_xml'] = $app->share(function ($options, $entity) { + $className = $options['class.driver.simple_xml']; + return new $className( array($entity['path'] => $entity['namespace']) ); + }); + + $app['orm.driver.php'] = $app->share(function ($options, $entity) { + $className = $options['class.driver.php']; + return new $className($entity['path']); + }); + $app['orm.cache.configurer'] = $app->protect(function($name, Configuration $config, $options) use ($app) { $config->setMetadataCacheImpl($app['orm.cache.locator']($name, 'metadata', $options)); $config->setQueryCacheImpl($app['orm.cache.locator']($name, 'query', $options)); @@ -256,6 +271,9 @@ public function register(\Pimple $app) throw new \RuntimeException('Host and port options need to be specified for memcache cache'); } + /** + * @var $memcache \Memcache + */ $memcache = $app['orm.cache.factory.backing_memcache'](); $memcache->connect($cacheOptions['host'], $cacheOptions['port']); @@ -273,7 +291,9 @@ public function register(\Pimple $app) if (empty($cacheOptions['host']) || empty($cacheOptions['port'])) { throw new \RuntimeException('Host and port options need to be specified for memcached cache'); } - + /** + * @var $memcached \Memcached + */ $memcached = $app['orm.cache.factory.backing_memcached'](); $memcached->addServer($cacheOptions['host'], $cacheOptions['port']); @@ -291,7 +311,9 @@ public function register(\Pimple $app) if (empty($cacheOptions['host']) || empty($cacheOptions['port'])) { throw new \RuntimeException('Host and port options need to be specified for redis cache'); } - + /** + * @var $redis \Redis + */ $redis = $app['orm.cache.factory.backing_redis'](); $redis->connect($cacheOptions['host'], $cacheOptions['port']); @@ -365,7 +387,7 @@ public function register(\Pimple $app) return $app[$cacheInstanceKey] = $app['orm.mapping_driver_chain.factory']($name); }); - $app['orm.mapping_driver_chain.factory'] = $app->protect(function($name) use ($app) { + $app['orm.mapping_driver_chain.factory'] = $app->protect(function() use ($app) { return new MappingDriverChain; }); @@ -375,7 +397,9 @@ public function register(\Pimple $app) if (null === $name) { $name = $app['orm.ems.default']; } - + /** + * @var MappingDriverChain $driverChain + */ $driverChain = $app['orm.mapping_driver_chain.locator']($name); $driverChain->addDriver($mappingDriver, $namespace); }); @@ -383,7 +407,11 @@ public function register(\Pimple $app) $app['orm.generate_psr0_mapping'] = $app->protect(function($resourceMapping) use ($app) { $mapping = array(); foreach ($resourceMapping as $resourceNamespace => $entityNamespace) { - $directory = $app['psr0_resource_locator']->findFirstDirectory($resourceNamespace); + if($app->offsetExists('psr0_resource_locator')) { + $directory = $app['psr0_resource_locator']->findFirstDirectory($resourceNamespace); + } else { + throw new \InvalidArgumentException('Not exist psr0_resource_locator'); + } if (!$directory) { throw new \InvalidArgumentException("Resources for mapping '$entityNamespace' could not be located; Looked for mapping resources at '$resourceNamespace'"); } @@ -393,19 +421,19 @@ public function register(\Pimple $app) return $mapping; }); - $app['orm.strategy.naming'] = $app->share(function($app) { + $app['orm.strategy.naming'] = $app->share(function() { return new DefaultNamingStrategy; }); - $app['orm.strategy.quote'] = $app->share(function($app) { + $app['orm.strategy.quote'] = $app->share(function() { return new DefaultQuoteStrategy; }); - $app['orm.entity_listener_resolver'] = $app->share(function($app) { + $app['orm.entity_listener_resolver'] = $app->share(function() { return new DefaultEntityListenerResolver; }); - $app['orm.repository_factory'] = $app->share(function($app) { + $app['orm.repository_factory'] = $app->share(function() { return new DefaultRepositoryFactory; }); @@ -425,8 +453,6 @@ public function register(\Pimple $app) /** * Get default ORM configuration settings. * - * @param Application $app Application - * * @return array */ protected function getOrmDefaults() From f3fcdb013b0d8c8416b8dbf80fe1faa850545f9a Mon Sep 17 00:00:00 2001 From: Dolgov_M Date: Mon, 23 Nov 2015 12:09:06 +0300 Subject: [PATCH 2/6] set EntityManager className as option --- .../Provider/DoctrineOrm/DoctrineOrmServiceProvider.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php index 49ca518..2f51a24 100755 --- a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php +++ b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php @@ -49,6 +49,7 @@ public function register(\Pimple $app) 'mappings' => array(), 'types' => array(), 'class.configuration' => 'Doctrine\ORM\Configuration', + 'class.entityManager' => 'Doctrine\ORM\EntityManager', 'class.driver.yml' => 'Doctrine\ORM\Mapping\Driver\YamlDriver', 'class.driver.simple_yml' => 'Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver', 'class.driver.xml' => 'Doctrine\ORM\Mapping\Driver\XmlDriver', @@ -103,7 +104,11 @@ public function register(\Pimple $app) } $ems[$name] = $app->share(function () use ($app, $options, $config) { - return EntityManager::create( + /** + * @var $entityManagerClassName EntityManager + */ + $entityManagerClassName = $options['class.entityManager']; + return $entityManagerClassName::create( $app['dbs'][$options['connection']], $config, $app['dbs.event_manager'][$options['connection']] From a4c46d3172f2da2f6b04cc9e349e6bc17a278227 Mon Sep 17 00:00:00 2001 From: Dolgov_M Date: Mon, 23 Nov 2015 12:53:06 +0300 Subject: [PATCH 3/6] issued className variable --- .../Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php index 2f51a24..537cc30 100755 --- a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php +++ b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php @@ -127,7 +127,8 @@ public function register(\Pimple $app) /** * @var $config Configuration */ - $config = new $options['class.configuration']; + $configurationClassName = $options['class.configuration']; + $config = new $configurationClassName; $app['orm.cache.configurer']($name, $config, $options); From 593862d94dfdecbcaaa1d48dc4417276d3d87122 Mon Sep 17 00:00:00 2001 From: Dolgov_M Date: Mon, 23 Nov 2015 12:56:59 +0300 Subject: [PATCH 4/6] rename driver factories --- .../DoctrineOrm/DoctrineOrmServiceProvider.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php index 537cc30..0baeeb8 100755 --- a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php +++ b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php @@ -179,8 +179,8 @@ public function register(\Pimple $app) : true; $driver = $config->newDefaultAnnotationDriver((array) $entity['path'], $useSimpleAnnotationReader); } else { - if( isset($app['orm.driver.'.$entity['type']]) ) { - $driver = $app['orm.driver.'.$entity['type']]( $options, $entity ); + if( isset($app['orm.driver.factory.'.$entity['type']]) ) { + $driver = $app['orm.driver.factory.'.$entity['type']]( $options, $entity ); } else { throw new \InvalidArgumentException(sprintf('"%s" is not a recognized driver', $entity['type'])); } @@ -203,27 +203,27 @@ public function register(\Pimple $app) return $configs; }); - $app['orm.driver.yml'] = $app->share(function ($options, $entity) { + $app['orm.driver.factory.yml'] = $app->share(function ($options, $entity) { $className = $options['class.driver.yml']; return new $className($entity['path']); }); - $app['orm.driver.simple_yml'] = $app->share(function ($options, $entity) { + $app['orm.driver.factory.simple_yml'] = $app->share(function ($options, $entity) { $className = $options['class.driver.simple_yml']; return new $className( array($entity['path'] => $entity['namespace']) ); }); - $app['orm.driver.xml'] = $app->share(function ($options, $entity) { + $app['orm.driver.factory.xml'] = $app->share(function ($options, $entity) { $className = $options['class.driver.xml']; return new $className($entity['path']); }); - $app['orm.driver.simple_xml'] = $app->share(function ($options, $entity) { + $app['orm.driver.factory.simple_xml'] = $app->share(function ($options, $entity) { $className = $options['class.driver.simple_xml']; return new $className( array($entity['path'] => $entity['namespace']) ); }); - $app['orm.driver.php'] = $app->share(function ($options, $entity) { + $app['orm.driver.factory.php'] = $app->share(function ($options, $entity) { $className = $options['class.driver.php']; return new $className($entity['path']); }); From 2df87e45e68911e5f7df8665cbc980788202dac4 Mon Sep 17 00:00:00 2001 From: Dolgov_M Date: Mon, 23 Nov 2015 13:11:58 +0300 Subject: [PATCH 5/6] factory is now return closure --- .../DoctrineOrmServiceProvider.php | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php index 0baeeb8..c030bf6 100755 --- a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php +++ b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php @@ -203,29 +203,39 @@ public function register(\Pimple $app) return $configs; }); - $app['orm.driver.factory.yml'] = $app->share(function ($options, $entity) { - $className = $options['class.driver.yml']; - return new $className($entity['path']); + $app['orm.driver.factory.yml'] = $app->share(function() { + return function ($options, $entity) { + $className = $options['class.driver.yml']; + return new $className($entity['path']); + }; }); - $app['orm.driver.factory.simple_yml'] = $app->share(function ($options, $entity) { - $className = $options['class.driver.simple_yml']; - return new $className( array($entity['path'] => $entity['namespace']) ); + $app['orm.driver.factory.simple_yml'] = $app->share(function() { + return function ($options, $entity) { + $className = $options['class.driver.simple_yml']; + return new $className( array($entity['path'] => $entity['namespace']) ); + }; }); - $app['orm.driver.factory.xml'] = $app->share(function ($options, $entity) { - $className = $options['class.driver.xml']; - return new $className($entity['path']); + $app['orm.driver.factory.xml'] = $app->share(function() { + return function ($options, $entity) { + $className = $options['class.driver.xml']; + return new $className($entity['path']); + }; }); - $app['orm.driver.factory.simple_xml'] = $app->share(function ($options, $entity) { - $className = $options['class.driver.simple_xml']; - return new $className( array($entity['path'] => $entity['namespace']) ); + $app['orm.driver.factory.simple_xml'] = $app->share(function() { + return function ($options, $entity) { + $className = $options['class.driver.simple_xml']; + return new $className( array($entity['path'] => $entity['namespace']) ); + }; }); - $app['orm.driver.factory.php'] = $app->share(function ($options, $entity) { - $className = $options['class.driver.php']; - return new $className($entity['path']); + $app['orm.driver.factory.php'] = $app->share(function() { + return function ($options, $entity) { + $className = $options['class.driver.php']; + return new $className($entity['path']); + }; }); $app['orm.cache.configurer'] = $app->protect(function($name, Configuration $config, $options) use ($app) { From 05aad3d98c6ada36b9fb5ac257c71f4427b775a8 Mon Sep 17 00:00:00 2001 From: Dolgov_M Date: Mon, 23 Nov 2015 14:41:22 +0300 Subject: [PATCH 6/6] changed order of arguments --- .../DoctrineOrm/DoctrineOrmServiceProvider.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php index c030bf6..4995ccd 100755 --- a/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php +++ b/src/Dflydev/Pimple/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php @@ -180,7 +180,7 @@ public function register(\Pimple $app) $driver = $config->newDefaultAnnotationDriver((array) $entity['path'], $useSimpleAnnotationReader); } else { if( isset($app['orm.driver.factory.'.$entity['type']]) ) { - $driver = $app['orm.driver.factory.'.$entity['type']]( $options, $entity ); + $driver = $app['orm.driver.factory.'.$entity['type']]( $entity, $options ); } else { throw new \InvalidArgumentException(sprintf('"%s" is not a recognized driver', $entity['type'])); } @@ -204,35 +204,35 @@ public function register(\Pimple $app) }); $app['orm.driver.factory.yml'] = $app->share(function() { - return function ($options, $entity) { + return function ( $entity, $options ) { $className = $options['class.driver.yml']; return new $className($entity['path']); }; }); $app['orm.driver.factory.simple_yml'] = $app->share(function() { - return function ($options, $entity) { + return function ( $entity, $options ) { $className = $options['class.driver.simple_yml']; return new $className( array($entity['path'] => $entity['namespace']) ); }; }); $app['orm.driver.factory.xml'] = $app->share(function() { - return function ($options, $entity) { + return function ( $entity, $options ) { $className = $options['class.driver.xml']; return new $className($entity['path']); }; }); $app['orm.driver.factory.simple_xml'] = $app->share(function() { - return function ($options, $entity) { + return function ( $entity, $options ) { $className = $options['class.driver.simple_xml']; return new $className( array($entity['path'] => $entity['namespace']) ); }; }); $app['orm.driver.factory.php'] = $app->share(function() { - return function ($options, $entity) { + return function ( $entity, $options ) { $className = $options['class.driver.php']; return new $className($entity['path']); };