Skip to content

Commit

Permalink
Merge pull request #16 from interactive-solutions/cache-service-manager
Browse files Browse the repository at this point in the history
Cache the zf2 service manager
  • Loading branch information
macnibblet authored Aug 1, 2017
2 parents 0c0cd2b + 0133011 commit 97d1c30
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 10 deletions.
2 changes: 0 additions & 2 deletions src/Context/EntityFixtureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use Behat\Gherkin\Node\TableNode;
use DateTime;
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\OptimisticLockException;
Expand Down
4 changes: 4 additions & 0 deletions src/Context/EntityHydrationTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ private function hydrateEntity(ClassMetadata $metadata, $entity, $values)
$this->setBoolFieldOfObject($entity, $field, $values[$field]);
break;

case Type::INTEGER:
$this->setFieldOfObject($entity, $field, (int) $values[$field]);
break;

default:
$this->setFieldOfObject($entity, $field, $values[$field]);
}
Expand Down
59 changes: 51 additions & 8 deletions src/Context/Initializer/ServiceManagerInitializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

use Behat\Behat\Context\Context;
use Behat\Behat\Context\Initializer\ContextInitializer;
use Doctrine\ORM\EntityManager;
use Zend\Mvc\Service\ServiceManagerConfig;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceManager;
Expand All @@ -21,6 +22,11 @@ class ServiceManagerInitializer implements ContextInitializer
*/
private $file;

/**
* @var ServiceManager
*/
private $serviceManager;

/**
* @param string $file
*/
Expand All @@ -44,16 +50,53 @@ public function initializeContext(Context $context)
throw new \LogicException(sprintf('The file %s was not found', $this->file));
}

// We _should_ always be in the root of a zf2 project when executing this
$config = include $this->file;
if (!$this->serviceManager) {
// We _should_ always be in the root of a zf2 project when executing this
$config = include $this->file;

$this->serviceManager = new ServiceManager(new ServiceManagerConfig($config));
$this->serviceManager->setService('ApplicationConfig', $config);

/* @var $moduleManager \Zend\ModuleManager\ModuleManager */
$moduleManager = $this->serviceManager->get('ModuleManager');
$moduleManager->loadModules();

$this->clearDoctrineCache();
}

/* @var EntityManager $entityManager */
$entityManager = $this->serviceManager->get(EntityManager::class);

if (!$entityManager->isOpen()) {
$this->serviceManager->setAllowOverride(true);
$this->serviceManager->setService(
EntityManager::class,
EntityManager::create(
$entityManager->getConnection(),
$entityManager->getConfiguration()
)
);
}

$context->setServiceManager($this->serviceManager);
}

/**
* Clear the doctrine cache
*/
private function clearDoctrineCache()
{
/* @var EntityManager $entityManager */
$entityManager = $this->serviceManager->get(EntityManager::class);

$serviceManager = new ServiceManager(new ServiceManagerConfig($config));
$serviceManager->setService('ApplicationConfig', $config);
// Clear doctrine cache
$cacheDriver = $entityManager->getConfiguration()->getMetadataCacheImpl();
$cacheDriver->deleteAll();

/* @var $moduleManager \Zend\ModuleManager\ModuleManager */
$moduleManager = $serviceManager->get('ModuleManager');
$moduleManager->loadModules();
$cacheDriver = $entityManager->getConfiguration()->getQueryCacheImpl();
$cacheDriver->deleteAll();

$context->setServiceManager($serviceManager);
$cacheDriver = $entityManager->getConfiguration()->getResultCacheImpl();
$cacheDriver->deleteAll();
}
}

0 comments on commit 97d1c30

Please sign in to comment.