13 protected function build($config, array $options)
16 $class = !empty($config[
'class']) ? $config[
'class'] : __NAMESPACE__ .
'\\ServiceBuilder';
19 $services = isset($config[
'services']) ? $config[
'services'] : $config;
22 foreach ($services as $name => &$service) {
24 $service[
'params'] = isset($service[
'params']) ? $service[
'params'] : array();
27 if (!empty($service[
'extends'])) {
30 if (!isset($services[$service[
'extends']])) {
32 "{$name} is trying to extend a non-existent service: {$service['extends']}"
36 $extended = &$services[$service[
'extends']];
39 if (empty($service[
'class'])) {
40 $service[
'class'] = isset($extended[
'class']) ? $extended[
'class'] :
'';
42 if ($extendsParams = isset($extended[
'params']) ? $extended[
'params'] :
false) {
43 $service[
'params'] = $service[
'params'] + $extendsParams;
48 if (!empty($options)) {
49 $service[
'params'] = $options + $service[
'params'];
52 $service[
'class'] = isset($service[
'class']) ? $service[
'class'] :
'';
55 return new $class($services);
63 if (isset($a[
'services']) && $b[
'services']) {
66 $result[
'services'] = $b[
'services'] + $a[
'services'];
69 foreach ($result[
'services'] as $name => &$service) {
72 if (isset($a[
'services'][$name][
'extends'])
73 && isset($b[
'services'][$name][
'extends'])
74 && $b[
'services'][$name][
'extends'] == $name
76 $service += $a[
'services'][$name];
78 $service[
'extends'] = $a[
'services'][$name][
'extends'];
80 if (isset($a[
'services'][$name][
'params'])) {
81 $service[
'params'] += $a[
'services'][$name][
'params'];