Skip to content

Commit

Permalink
Do not require laminas-mvc to allow mezzio analysis too (#21)
Browse files Browse the repository at this point in the history
* Do not require laminas-mvc to allow mezzio analysis too

* Avoid hard dependencies on MVC and ModuleManager modules

* composer-normalize
  • Loading branch information
Slamdunk authored May 12, 2021
1 parent aae048a commit 6d815cb
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 24 deletions.
5 changes: 3 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
],
"require": {
"php": "^7.4 || ^8.0",
"laminas/laminas-mvc": "^3.2.0",
"phpstan/phpstan": "^0.12.86"
},
"conflict": {
Expand All @@ -31,6 +30,7 @@
"laminas/laminas-inputfilter": "<2.12",
"laminas/laminas-log": "<2.13",
"laminas/laminas-mail": "<2.14",
"laminas/laminas-mvc": "<3.2",
"laminas/laminas-paginator": "<2.10",
"laminas/laminas-validator": "<2.14"
},
Expand All @@ -43,10 +43,11 @@
"laminas/laminas-inputfilter": "^2.12.0",
"laminas/laminas-log": "^2.13.1",
"laminas/laminas-mail": "^2.14.0",
"laminas/laminas-mvc": "^3.2.0",
"laminas/laminas-paginator": "^2.10.0",
"laminas/laminas-validator": "^2.14.4",
"malukenho/mcbumpface": "^1.1.5",
"phpstan/phpstan-phpunit": "^0.12.18",
"phpstan/phpstan-phpunit": "^0.12.19",
"phpunit/phpunit": "^9.5.4",
"slam/php-cs-fixer-extensions": "^v3.0.1",
"slam/php-debug-r": "^v1.7.0"
Expand Down
48 changes: 26 additions & 22 deletions src/ServiceManagerLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
namespace LaminasPhpStan;

use Interop\Container\ContainerInterface as InteropContainerInterface;
use Laminas\ModuleManager\ModuleManager;
use Laminas\Mvc\Service\ServiceListenerFactory;
use Laminas\Mvc\Service\ServiceManagerConfig;
use Laminas\ServiceManager\ServiceLocatorInterface;
use Laminas\ServiceManager\ServiceManager;
use Psr\Container\ContainerInterface as PsrContainerInterface;
use ReflectionProperty;

final class ServiceManagerLoader
{
Expand All @@ -19,17 +20,17 @@ final class ServiceManagerLoader
* @var string[]
*/
private array $knownModules = [
\Laminas\Cache\Module::class,
\Laminas\Filter\Module::class,
\Laminas\Form\Module::class,
\Laminas\Hydrator\Module::class,
\Laminas\I18n\Module::class,
\Laminas\InputFilter\Module::class,
\Laminas\Log\Module::class,
\Laminas\Mail\Module::class,
\Laminas\Paginator\Module::class,
\Laminas\Router\Module::class,
\Laminas\Validator\Module::class,
\Laminas\Cache\ConfigProvider::class,
\Laminas\Filter\ConfigProvider::class,
\Laminas\Form\ConfigProvider::class,
\Laminas\Hydrator\ConfigProvider::class,
\Laminas\I18n\ConfigProvider::class,
\Laminas\InputFilter\ConfigProvider::class,
\Laminas\Log\ConfigProvider::class,
\Laminas\Mail\ConfigProvider::class,
\Laminas\Paginator\ConfigProvider::class,
\Laminas\Router\ConfigProvider::class,
\Laminas\Validator\ConfigProvider::class,
];

/**
Expand Down Expand Up @@ -63,20 +64,23 @@ public function __construct(?string $serviceManagerLoader)
public function getServiceLocator(string $serviceManagerName): ServiceLocatorInterface
{
if (null === $this->serviceLocator) {
$serviceManagerConfig = new ServiceManagerConfig();
$serviceManager = new ServiceManager();
$serviceManagerConfig->configureServiceManager($serviceManager);
$config = [
'modules' => [],
'module_listener_options' => [],
];
$serviceManager = new ServiceManager(['services' => ['config' => []]]);
if (\class_exists(ServiceManagerConfig::class)) {
(new ServiceManagerConfig())->configureServiceManager($serviceManager);
}
if (\class_exists(ServiceListenerFactory::class)) {
$refProp = new ReflectionProperty(ServiceListenerFactory::class, 'defaultServiceConfig');
$refProp->setAccessible(true);
$config = $refProp->getValue(new ServiceListenerFactory());
unset($config['factories']['config']);
$refProp->setAccessible(false);
$serviceManager->configure($config);
}
foreach ($this->knownModules as $module) {
if (\class_exists($module)) {
$config['modules'][$module] = new $module();
$serviceManager->configure((new $module())->getDependencyConfig());
}
}
$serviceManager->setService('ApplicationConfig', $config);
$serviceManager->get(ModuleManager::class)->loadModules();

$this->serviceLocator = new UnmappedAliasServiceLocatorProxy($serviceManager);
}
Expand Down

0 comments on commit 6d815cb

Please sign in to comment.