92 lines
3.4 KiB
PHP
92 lines
3.4 KiB
PHP
<?php
|
|
/**
|
|
* @see https://github.com/zendframework/zend-config for the canonical source repository
|
|
* @copyright Copyright (c) 2005-2017 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license https://github.com/zendframework/zend-config/blob/master/LICENSE.md New BSD License
|
|
*/
|
|
|
|
namespace Zend\Config;
|
|
|
|
use Interop\Container\ContainerInterface;
|
|
use Zend\ServiceManager\AbstractPluginManager;
|
|
use Zend\ServiceManager\Exception\InvalidServiceException;
|
|
use Zend\ServiceManager\Factory\InvokableFactory;
|
|
|
|
class ReaderPluginManager extends AbstractPluginManager
|
|
{
|
|
protected $instanceOf = Reader\ReaderInterface::class;
|
|
|
|
protected $aliases = [
|
|
'ini' => Reader\Ini::class,
|
|
'Ini' => Reader\Ini::class,
|
|
'json' => Reader\Json::class,
|
|
'Json' => Reader\Json::class,
|
|
'xml' => Reader\Xml::class,
|
|
'Xml' => Reader\Xml::class,
|
|
'yaml' => Reader\Yaml::class,
|
|
'Yaml' => Reader\Yaml::class,
|
|
'javaproperties' => Reader\JavaProperties::class,
|
|
'javaProperties' => Reader\JavaProperties::class,
|
|
'JavaProperties' => Reader\JavaProperties::class,
|
|
];
|
|
|
|
protected $factories = [
|
|
Reader\Ini::class => InvokableFactory::class,
|
|
Reader\Json::class => InvokableFactory::class,
|
|
Reader\Xml::class => InvokableFactory::class,
|
|
Reader\Yaml::class => InvokableFactory::class,
|
|
Reader\JavaProperties::class => InvokableFactory::class,
|
|
// Legacy (v2) due to alias resolution; canonical form of resolved
|
|
// alias is used to look up the factory, while the non-normalized
|
|
// resolved alias is used as the requested name passed to the factory.
|
|
'zendconfigreaderini' => InvokableFactory::class,
|
|
'zendconfigreaderjson' => InvokableFactory::class,
|
|
'zendconfigreaderxml' => InvokableFactory::class,
|
|
'zendconfigreaderyaml' => InvokableFactory::class,
|
|
'zendconfigreaderjavaproperties' => InvokableFactory::class,
|
|
];
|
|
|
|
/**
|
|
* Validate the plugin is of the expected type (v3).
|
|
*
|
|
* Validates against `$instanceOf`.
|
|
*
|
|
* @param mixed $instance
|
|
* @throws InvalidServiceException
|
|
*/
|
|
public function validate($instance)
|
|
{
|
|
if (! $instance instanceof $this->instanceOf) {
|
|
throw new InvalidServiceException(sprintf(
|
|
'%s can only create instances of %s; %s is invalid',
|
|
get_class($this),
|
|
$this->instanceOf,
|
|
(is_object($instance) ? get_class($instance) : gettype($instance))
|
|
));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate the plugin is of the expected type (v2).
|
|
*
|
|
* Proxies to `validate()`.
|
|
*
|
|
* @param mixed $instance
|
|
* @throws Exception\InvalidArgumentException
|
|
*/
|
|
public function validatePlugin($instance)
|
|
{
|
|
try {
|
|
$this->validate($instance);
|
|
} catch (InvalidServiceException $e) {
|
|
throw new Exception\InvalidArgumentException($e->getMessage(), $e->getCode(), $e);
|
|
}
|
|
}
|
|
|
|
public function __construct(ContainerInterface $container, array $config = [])
|
|
{
|
|
$config = array_merge_recursive(['aliases' => $this->aliases], $config);
|
|
parent::__construct($container, $config);
|
|
}
|
|
}
|