Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
7 / 7 |
CRAP | |
100.00% |
19 / 19 |
service_collection | |
100.00% |
1 / 1 |
|
100.00% |
7 / 7 |
11 | |
100.00% |
19 / 19 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
getIterator | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
offsetGet | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
add | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
add_service_class | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
get_service_classes | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
get_by_class | |
100.00% |
1 / 1 |
5 | |
100.00% |
9 / 9 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\di; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
/** | |
* Collection of services to be configured at container compile time. | |
*/ | |
class service_collection extends \ArrayObject | |
{ | |
/** | |
* @var ContainerInterface | |
*/ | |
protected $container; | |
/** | |
* @var array | |
*/ | |
protected $service_classes; | |
/** | |
* Constructor | |
* | |
* @param ContainerInterface $container Container object | |
*/ | |
public function __construct(ContainerInterface $container) | |
{ | |
$this->container = $container; | |
$this->service_classes = array(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getIterator() | |
{ | |
return new service_collection_iterator($this); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function offsetGet($index) | |
{ | |
return $this->container->get($index); | |
} | |
/** | |
* Add a service to the collection | |
* | |
* @param string $name The service name | |
* @return void | |
*/ | |
public function add($name) | |
{ | |
$this->offsetSet($name, false); | |
} | |
/** | |
* Add a service's class to the collection | |
* | |
* @param string $service_id | |
* @param string $class | |
*/ | |
public function add_service_class($service_id, $class) | |
{ | |
$this->service_classes[$service_id] = $class; | |
} | |
/** | |
* Get services' classes | |
* | |
* @return array | |
*/ | |
public function get_service_classes() | |
{ | |
return $this->service_classes; | |
} | |
/** | |
* Returns the service associated to a class | |
* | |
* @return mixed | |
* @throw \RuntimeException if the | |
*/ | |
public function get_by_class($class) | |
{ | |
$service_id = null; | |
foreach ($this->service_classes as $id => $service_class) | |
{ | |
if ($service_class === $class) | |
{ | |
if ($service_id !== null) | |
{ | |
throw new \RuntimeException('More than one service definitions found for class "'.$class.'" in collection.'); | |
} | |
$service_id = $id; | |
} | |
} | |
if ($service_id === null) | |
{ | |
throw new \RuntimeException('No service found for class "'.$class.'" in collection.'); | |
} | |
return $this->offsetGet($service_id); | |
} | |
} |