From dc460a52a07901a82176bc3c2330731a4e9cda03 Mon Sep 17 00:00:00 2001 From: Olexandr Ponomarenko Date: Fri, 17 Sep 2021 10:11:30 -0400 Subject: [PATCH 1/2] Add addFactoryToContainer method --- src/Codeception/Lib/Connector/Laminas.php | 18 ++++++++++++++++++ src/Codeception/Module/Laminas.php | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/Codeception/Lib/Connector/Laminas.php b/src/Codeception/Lib/Connector/Laminas.php index 965aeeb..4feee05 100644 --- a/src/Codeception/Lib/Connector/Laminas.php +++ b/src/Codeception/Lib/Connector/Laminas.php @@ -47,6 +47,11 @@ class Laminas extends AbstractBrowser */ private $persistentServices = []; + /** + * @var array + */ + private $persistentFactories = []; + public function setApplicationConfig(array $applicationConfig): void { $this->applicationConfig = $applicationConfig; @@ -148,6 +153,15 @@ public function addServiceToContainer(string $name, $service): void $this->persistentServices[$name] = $service; } + public function addFactoryToContainer(string $name, $factory): void + { + $this->application->getServiceManager()->setAllowOverride(true); + $this->application->getServiceManager()->setFactory($name, $factory); + $this->application->getServiceManager()->setAllowOverride(false); + + $this->persistentFactories[$name] = $factory; + } + private function extractHeaders(BrowserKitRequest $browserKitRequest): Headers { $headers = []; @@ -200,5 +214,9 @@ private function createApplication(): void $eventManager = $this->application->getEventManager(); $eventManager->detach([$sendResponseListener, 'sendResponse']); + + $serviceManager->setAllowOverride(true); + $serviceManager->configure(['factories' => $this->persistentFactories]); + $serviceManager->setAllowOverride(false); } } diff --git a/src/Codeception/Module/Laminas.php b/src/Codeception/Module/Laminas.php index 87e27a8..33649e1 100644 --- a/src/Codeception/Module/Laminas.php +++ b/src/Codeception/Module/Laminas.php @@ -181,6 +181,16 @@ public function addServiceToContainer(string $name, object $service): void $this->client->addServiceToContainer($name, $service); } + /** + * Adds factory to a Laminas container + * + * @part services + */ + public function addFactoryToContainer(string $name, $factory): void + { + $this->client->addFactoryToContainer($name, $factory); + } + /** * Opens web page using route name and parameters. * From 1fd4b05cbcdabd7d02d97591bca48ae041e21f1b Mon Sep 17 00:00:00 2001 From: Olexandr Ponomarenko Date: Mon, 11 Oct 2021 11:26:06 -0400 Subject: [PATCH 2/2] Add params description to DocBlock --- src/Codeception/Module/Laminas.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Codeception/Module/Laminas.php b/src/Codeception/Module/Laminas.php index 33649e1..6a19512 100644 --- a/src/Codeception/Module/Laminas.php +++ b/src/Codeception/Module/Laminas.php @@ -18,6 +18,7 @@ use Laminas\Router\Http\Hostname; use Laminas\Router\Http\Part; use Laminas\Router\Http\TreeRouteStack; +use Laminas\ServiceManager\Factory\FactoryInterface; use Traversable; use function array_unique; use function class_exists; @@ -184,6 +185,9 @@ public function addServiceToContainer(string $name, object $service): void /** * Adds factory to a Laminas container * + * @param string $name + * @param string|callable|FactoryInterface $factory + * @return void * @part services */ public function addFactoryToContainer(string $name, $factory): void