Completed
Pull Request — 2.x (#2148)
by Christian
03:15
created

FOSRestExtension::getConfiguration()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
crap 1
1
<?php
2
3
/*
4
 * This file is part of the FOSRestBundle package.
5
 *
6
 * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace FOS\RestBundle\DependencyInjection;
13
14
use FOS\RestBundle\View\ViewHandler;
15
use Symfony\Component\Config\FileLocator;
16
use Symfony\Component\DependencyInjection\Alias;
17
use Symfony\Component\DependencyInjection\ChildDefinition;
18
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
19
use Symfony\Component\DependencyInjection\ContainerBuilder;
20
use Symfony\Component\DependencyInjection\ContainerInterface;
21
use Symfony\Component\DependencyInjection\DefinitionDecorator;
22
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
23
use Symfony\Component\DependencyInjection\Reference;
24
use Symfony\Component\Form\AbstractType;
25
use Symfony\Component\Form\Extension\Core\Type\FormType;
26
use Symfony\Component\HttpFoundation\Response;
27
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
28
use Symfony\Component\HttpKernel\EventListener\ErrorListener;
29
use Symfony\Component\HttpKernel\EventListener\ExceptionListener as LegacyHttpKernelExceptionListener;
30
use Symfony\Component\Validator\Constraint;
31
32
/**
33
 * @internal since 2.8
34
 */
35
class FOSRestExtension extends Extension
36
{
37
    /**
38
     * {@inheritdoc}
39
     */
40 16
    public function getConfiguration(array $config, ContainerBuilder $container)
41
    {
42 16
        return new Configuration($container->getParameter('kernel.debug'));
43
    }
44
45 58
    public function load(array $configs, ContainerBuilder $container)
46
    {
47 58
        $configuration = new Configuration($container->getParameter('kernel.debug'));
48 58
        $config = $this->processConfiguration($configuration, $configs);
49
50 53
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
51 53
        $loader->load('view.xml');
52 53
        $loader->load('routing.xml');
53 53
        $loader->load('request.xml');
54 53
        $loader->load('serializer.xml');
55
56 53
        $restRouteLoader = $container->getDefinition('fos_rest.routing.loader.controller');
57
58 53
        if ($config['routing_loader']['parse_controller_name']) {
59 4
            $restRouteLoader->addArgument(new Reference('controller_name_converter', ContainerInterface::NULL_ON_INVALID_REFERENCE));
60
        }
61
62 53
        $restRouteLoader->addArgument(new Reference('fos_rest.routing.loader.reader.controller'));
63 53
        $restRouteLoader->addArgument($config['routing_loader']['default_format']);
64
65 53
        $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(4, $config['routing_loader']['default_format']);
66 53
        $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(4, $config['routing_loader']['default_format']);
67
68 53
        $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(2, $config['routing_loader']['include_format']);
69 53
        $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(2, $config['routing_loader']['include_format']);
70 53
        $container->getDefinition('fos_rest.routing.loader.reader.action')->replaceArgument(3, $config['routing_loader']['include_format']);
71 53
        $container->getDefinition('fos_rest.routing.loader.reader.action')->replaceArgument(5, $config['routing_loader']['prefix_methods']);
72
73 53
        foreach ($config['service'] as $key => $service) {
74 53
            if ('validator' === $service && empty($config['body_converter']['validate'])) {
75 50
                continue;
76
            }
77
78 53
            if (null !== $service) {
79 53
                if ('view_handler' === $key) {
80 53
                    $container->setAlias('fos_rest.'.$key, new Alias($service, true));
81 53
                } elseif('templating' === $key) {
82 6
                    $alias = new Alias($service);
83
84 6
                    if (method_exists($alias, 'setDeprecated')) {
85 6
                        $alias->setDeprecated(true, 'The "%alias_id%" service alias is deprecated since FOSRestBundle 2.8.');
86
                    }
87
88 6
                    $container->setAlias('fos_rest.'.$key, $alias);
89
                } else {
90 53
                    $container->setAlias('fos_rest.'.$key, $service);
91
                }
92
            }
93
        }
94
95 53
        $this->loadForm($config, $loader, $container);
96 53
        $this->loadException($config, $loader, $container);
97 53
        $this->loadBodyConverter($config, $loader, $container);
98 53
        $this->loadView($config, $loader, $container);
99
100 53
        $this->loadBodyListener($config, $loader, $container);
101 53
        $this->loadFormatListener($config, $loader, $container);
102 53
        $this->loadVersioning($config, $loader, $container);
103 53
        $this->loadParamFetcherListener($config, $loader, $container);
104 53
        $this->loadAllowedMethodsListener($config, $loader, $container);
105 53
        $this->loadAccessDeniedListener($config, $loader, $container);
106 53
        $this->loadZoneMatcherListener($config, $loader, $container);
107
108
        // Needs RequestBodyParamConverter and View Handler loaded.
109 53
        $this->loadSerializer($config, $container);
110 53
    }
111
112 53
    private function loadForm(array $config, XmlFileLoader $loader, ContainerBuilder $container)
113
    {
114 53
        if (!empty($config['disable_csrf_role'])) {
115 2
            $loader->load('forms.xml');
116
117 2
            $definition = $container->getDefinition('fos_rest.form.extension.csrf_disable');
118 2
            $definition->replaceArgument(1, $config['disable_csrf_role']);
119
120
            // BC for Symfony < 2.8: the extended_type attribute is used on higher versions
121 2
            if (!method_exists(AbstractType::class, 'getBlockPrefix')) {
122
                $definition->addTag('form.type_extension', ['alias' => 'form']);
123
            } else {
124 2
                $definition->addTag('form.type_extension', ['extended_type' => FormType::class]);
125
            }
126
        }
127 53
    }
128
129 53
    private function loadAccessDeniedListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
130
    {
131 53
        if ($config['access_denied_listener']['enabled'] && !empty($config['access_denied_listener']['formats'])) {
132
            $loader->load('access_denied_listener.xml');
133
134
            $service = $container->getDefinition('fos_rest.access_denied_listener');
135
136
            if (!empty($config['access_denied_listener']['service'])) {
137
                $service->clearTag('kernel.event_subscriber');
138
            }
139
140
            $service->replaceArgument(0, $config['access_denied_listener']['formats']);
141
            $service->replaceArgument(1, $config['unauthorized_challenge']);
142
        }
143 53
    }
144
145 53
    private function loadAllowedMethodsListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
146
    {
147 53
        if ($config['allowed_methods_listener']['enabled']) {
148 3
            if (!empty($config['allowed_methods_listener']['service'])) {
149
                $service = $container->getDefinition('fos_rest.allowed_methods_listener');
150
                $service->clearTag('kernel.event_listener');
151
            }
152
153 3
            $loader->load('allowed_methods_listener.xml');
154
155 3
            $container->getDefinition('fos_rest.allowed_methods_loader')->replaceArgument(1, $config['cache_dir']);
156
        }
157 53
    }
158
159 53
    private function loadBodyListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
160
    {
161 53
        if ($config['body_listener']['enabled']) {
162 52
            $loader->load('body_listener.xml');
163
164 52
            $service = $container->getDefinition('fos_rest.body_listener');
165
166 52
            if (!empty($config['body_listener']['service'])) {
167
                $service->clearTag('kernel.event_listener');
168
            }
169
170 52
            $service->replaceArgument(1, $config['body_listener']['throw_exception_on_unsupported_content_type']);
171 52
            $service->addMethodCall('setDefaultFormat', array($config['body_listener']['default_format']));
172
173 52
            $container->getDefinition('fos_rest.decoder_provider')->replaceArgument(1, $config['body_listener']['decoders']);
174
175 52
            if (class_exists(ServiceLocatorTagPass::class)) {
176 52
                $decoderServicesMap = array();
177
178 52
                foreach ($config['body_listener']['decoders'] as $id) {
179 52
                    $decoderServicesMap[$id] = new Reference($id);
180
                }
181
182 52
                $decodersServiceLocator = ServiceLocatorTagPass::register($container, $decoderServicesMap);
183 52
                $container->getDefinition('fos_rest.decoder_provider')->replaceArgument(0, $decodersServiceLocator);
184
            }
185
186 52
            $arrayNormalizer = $config['body_listener']['array_normalizer'];
187
188 52
            if (null !== $arrayNormalizer['service']) {
189 3
                $bodyListener = $container->getDefinition('fos_rest.body_listener');
190 3
                $bodyListener->addArgument(new Reference($arrayNormalizer['service']));
191 3
                $bodyListener->addArgument($arrayNormalizer['forms']);
192
            }
193
        }
194 53
    }
195
196 53
    private function loadFormatListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
197
    {
198 53 View Code Duplication
        if ($config['format_listener']['enabled'] && !empty($config['format_listener']['rules'])) {
199 6
            $loader->load('format_listener.xml');
200
201 6
            if (!empty($config['format_listener']['service'])) {
202
                $service = $container->getDefinition('fos_rest.format_listener');
203
                $service->clearTag('kernel.event_listener');
204
            }
205
206 6
            $container->setParameter(
207 6
                'fos_rest.format_listener.rules',
208 6
                $config['format_listener']['rules']
209
            );
210
        }
211 53
    }
212
213 53
    private function loadVersioning(array $config, XmlFileLoader $loader, ContainerBuilder $container)
214
    {
215 53
        if (!empty($config['versioning']['enabled'])) {
216 2
            $loader->load('versioning.xml');
217
218 2
            $versionListener = $container->getDefinition('fos_rest.versioning.listener');
219 2
            $versionListener->replaceArgument(1, $config['versioning']['default_version']);
220
221 2
            $resolvers = [];
222 2 View Code Duplication
            if ($config['versioning']['resolvers']['query']['enabled']) {
223 2
                $resolvers['query'] = $container->getDefinition('fos_rest.versioning.query_parameter_resolver');
224 2
                $resolvers['query']->replaceArgument(0, $config['versioning']['resolvers']['query']['parameter_name']);
225
            }
226 2 View Code Duplication
            if ($config['versioning']['resolvers']['custom_header']['enabled']) {
227 2
                $resolvers['custom_header'] = $container->getDefinition('fos_rest.versioning.header_resolver');
228 2
                $resolvers['custom_header']->replaceArgument(0, $config['versioning']['resolvers']['custom_header']['header_name']);
229
            }
230 2 View Code Duplication
            if ($config['versioning']['resolvers']['media_type']['enabled']) {
231 2
                $resolvers['media_type'] = $container->getDefinition('fos_rest.versioning.media_type_resolver');
232 2
                $resolvers['media_type']->replaceArgument(0, $config['versioning']['resolvers']['media_type']['regex']);
233
            }
234
235 2
            $chainResolver = $container->getDefinition('fos_rest.versioning.chain_resolver');
236 2
            foreach ($config['versioning']['guessing_order'] as $resolver) {
237 2
                if (isset($resolvers[$resolver])) {
238 2
                    $chainResolver->addMethodCall('addResolver', [$resolvers[$resolver]]);
239
                }
240
            }
241
        }
242 53
    }
243
244 53
    private function loadParamFetcherListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
245
    {
246 53
        if ($config['param_fetcher_listener']['enabled']) {
247 5
            if (!class_exists(Constraint::class)) {
248
                @trigger_error('Enabling the fos_rest.param_fetcher_listener option when the Symfony Validator component is not installed is deprecated since FOSRestBundle 2.6 and will throw an exception in 3.0. Disable the feature or install the symfony/validator package.', E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
249
            }
250
251 5
            $loader->load('param_fetcher_listener.xml');
252
253 5
            if (!empty($config['param_fetcher_listener']['service'])) {
254
                $service = $container->getDefinition('fos_rest.param_fetcher_listener');
255
                $service->clearTag('kernel.event_listener');
256
            }
257
258 5
            if ($config['param_fetcher_listener']['force']) {
259 1
                $container->getDefinition('fos_rest.param_fetcher_listener')->replaceArgument(1, true);
260
            }
261
        }
262 53
    }
263
264 53
    private function loadBodyConverter(array $config, XmlFileLoader $loader, ContainerBuilder $container)
265
    {
266 53
        if (!$this->isConfigEnabled($container, $config['body_converter'])) {
267 46
            return;
268
        }
269
270 7
        $loader->load('request_body_param_converter.xml');
271
272 7
        if (!empty($config['body_converter']['validation_errors_argument'])) {
273 7
            $container->getDefinition('fos_rest.converter.request_body')->replaceArgument(4, $config['body_converter']['validation_errors_argument']);
274
        }
275 7
    }
276
277 53
    private function loadView(array $config, XmlFileLoader $loader, ContainerBuilder $container)
278
    {
279 53
        if (!empty($config['view']['jsonp_handler'])) {
280 1
            $childDefinitionClass = class_exists(ChildDefinition::class) ? ChildDefinition::class : DefinitionDecorator::class;
281 1
            $handler = new $childDefinitionClass($config['service']['view_handler']);
282 1
            $handler->setPublic(true);
283
284 1
            $jsonpHandler = new Reference('fos_rest.view_handler.jsonp');
285 1
            $handler->addMethodCall('registerHandler', ['jsonp', [$jsonpHandler, 'createResponse']]);
286 1
            $container->setDefinition('fos_rest.view_handler', $handler);
287
288 1
            $container->getDefinition('fos_rest.view_handler.jsonp')->replaceArgument(0, $config['view']['jsonp_handler']['callback_param']);
289
290 1
            if (empty($config['view']['mime_types']['jsonp'])) {
291 1
                $config['view']['mime_types']['jsonp'] = $config['view']['jsonp_handler']['mime_type'];
292
            }
293
        }
294
295 53 View Code Duplication
        if ($config['view']['mime_types']['enabled']) {
296 3
            $loader->load('mime_type_listener.xml');
297
298 3
            if (!empty($config['mime_type_listener']['service'])) {
299
                $service = $container->getDefinition('fos_rest.mime_type_listener');
300
                $service->clearTag('kernel.event_listener');
301
            }
302
303 3
            $container->getDefinition('fos_rest.mime_type_listener')->replaceArgument(0, $config['view']['mime_types']['formats']);
304
        }
305
306 53 View Code Duplication
        if ($config['view']['view_response_listener']['enabled']) {
307 9
            $loader->load('view_response_listener.xml');
308 9
            $service = $container->getDefinition('fos_rest.view_response_listener');
309
310 9
            if (!empty($config['view_response_listener']['service'])) {
311
                $service->clearTag('kernel.event_listener');
312
            }
313
314 9
            $service->replaceArgument(1, $config['view']['view_response_listener']['force']);
315
        }
316
317 53
        $formats = [];
318 53 View Code Duplication
        foreach ($config['view']['formats'] as $format => $enabled) {
319 53
            if ($enabled) {
320 53
                $formats[$format] = false;
321
            }
322
        }
323 53 View Code Duplication
        foreach ($config['view']['templating_formats'] as $format => $enabled) {
324 53
            if ($enabled) {
325 53
                $formats[$format] = true;
326
            }
327
        }
328
329 53
        $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(3, $formats);
330 53
        $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(3, $formats);
331 53
        $container->getDefinition('fos_rest.routing.loader.reader.action')->replaceArgument(4, $formats);
332
333 53
        foreach ($config['view']['force_redirects'] as $format => $code) {
334 7
            if (true === $code) {
335 7
                $config['view']['force_redirects'][$format] = Response::HTTP_FOUND;
336
            }
337
        }
338
339 53 View Code Duplication
        if (!is_numeric($config['view']['failed_validation'])) {
340
            $config['view']['failed_validation'] = constant(sprintf('%s::%s', Response::class, $config['view']['failed_validation']));
341
        }
342
343 53 View Code Duplication
        if (!is_numeric($config['view']['empty_content'])) {
344
            $config['view']['empty_content'] = constant(sprintf('%s::%s', Response::class, $config['view']['empty_content']));
345
        }
346
347 53
        $defaultViewHandler = $container->getDefinition('fos_rest.view_handler.default');
348
349 53
        if ([] !== $config['view']['force_redirects']) {
350 7
            @trigger_error('Not setting the "fos_rest.view.force_redirects" configuration option to an empty array is deprecated since FOSRestBundle 2.8.', E_USER_DEPRECATED);
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
351
        }
352
353 53
        if (null === $config['service']['templating'] && [] === $config['view']['force_redirects'] && null === $config['view']['default_engine']) {
354 46
            $defaultViewHandler->setFactory([ViewHandler::class, 'create']);
355 46
            $defaultViewHandler->setArguments([
356 46
                new Reference('fos_rest.router'),
357 46
                new Reference('fos_rest.serializer'),
358 46
                new Reference('request_stack'),
359 46
                $formats,
360 46
                $config['view']['failed_validation'],
361 46
                $config['view']['empty_content'],
362 46
                $config['view']['serialize_null'],
363
            ]);
364
        } else {
365 7
            $defaultViewHandler->setArguments([
366 7
                new Reference('fos_rest.router'),
367 7
                new Reference('fos_rest.serializer'),
368 7
                new Reference('fos_rest.templating', ContainerInterface::NULL_ON_INVALID_REFERENCE),
369 7
                new Reference('request_stack'),
370 7
                $formats,
371 7
                $config['view']['failed_validation'],
372 7
                $config['view']['empty_content'],
373 7
                $config['view']['serialize_null'],
374 7
                $config['view']['force_redirects'],
375 7
                $config['view']['default_engine'],
376
            ]);
377
        }
378 53
    }
379
380 53
    private function loadException(array $config, XmlFileLoader $loader, ContainerBuilder $container)
381
    {
382 53
        if ($config['exception']['enabled']) {
383 49
            $loader->load('exception_listener.xml');
384
385 49
            if (!empty($config['exception']['service'])) {
386
                $service = $container->getDefinition('fos_rest.exception_listener');
387
                $service->clearTag('kernel.event_subscriber');
388
            }
389
390 49
            $controller = $config['exception']['exception_controller'] ?? null;
391
392 49
            if (class_exists(ErrorListener::class)) {
393 49
                $container->register('fos_rest.error_listener', ErrorListener::class)
394 49
                    ->setArguments([
395 49
                        $controller,
396 49
                        new Reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE),
397 49
                        '%kernel.debug%',
398
                    ])
399 49
                    ->addTag('monolog.logger', ['channel' => 'request']);
400
            } else {
401
                $container->register('fos_rest.error_listener', LegacyHttpKernelExceptionListener::class)
402
                    ->setArguments([
403
                        $controller,
404
                        new Reference('logger', ContainerInterface::NULL_ON_INVALID_REFERENCE),
405
                    ])
406
                    ->addTag('monolog.logger', ['channel' => 'request']);
407
            }
408
409 49
            $container->getDefinition('fos_rest.exception.codes_map')
410 49
                ->replaceArgument(0, $config['exception']['codes']);
411 49
            $container->getDefinition('fos_rest.exception.messages_map')
412 49
                ->replaceArgument(0, $config['exception']['messages']);
413
414 49
            $container->getDefinition('fos_rest.exception.controller')
415 49
                ->replaceArgument(2, $config['exception']['debug']);
416 49
            $container->getDefinition('fos_rest.serializer.exception_normalizer.jms')
417 49
                ->replaceArgument(1, $config['exception']['debug']);
418 49
            $container->getDefinition('fos_rest.serializer.exception_normalizer.symfony')
419 49
                ->replaceArgument(1, $config['exception']['debug']);
420
        }
421 53
    }
422
423 53
    private function loadSerializer(array $config, ContainerBuilder $container)
424
    {
425 53
        $bodyConverter = $container->hasDefinition('fos_rest.converter.request_body') ? $container->getDefinition('fos_rest.converter.request_body') : null;
426 53
        $viewHandler = $container->getDefinition('fos_rest.view_handler.default');
427 53
        $options = array();
428
429 53 View Code Duplication
        if (!empty($config['serializer']['version'])) {
430
            if ($bodyConverter) {
431
                $bodyConverter->replaceArgument(2, $config['serializer']['version']);
432
            }
433
            $options['exclusionStrategyVersion'] = $config['serializer']['version'];
434
        }
435
436 53 View Code Duplication
        if (!empty($config['serializer']['groups'])) {
437
            if ($bodyConverter) {
438
                $bodyConverter->replaceArgument(1, $config['serializer']['groups']);
439
            }
440
            $options['exclusionStrategyGroups'] = $config['serializer']['groups'];
441
        }
442
443 53
        $options['serializeNullStrategy'] = $config['serializer']['serialize_null'];
444 53
        $viewHandler->addArgument($options);
445 53
    }
446
447 53
    private function loadZoneMatcherListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
448
    {
449 53
        if (!empty($config['zone'])) {
450 1
            $loader->load('zone_matcher_listener.xml');
451 1
            $zoneMatcherListener = $container->getDefinition('fos_rest.zone_matcher_listener');
452
453 1
            foreach ($config['zone'] as $zone) {
454 1
                $matcher = $this->createZoneRequestMatcher(
455 1
                    $container,
456 1
                    $zone['path'],
457 1
                    $zone['host'],
458 1
                    $zone['methods'],
459 1
                    $zone['ips']
460
                );
461
462 1
                $zoneMatcherListener->addMethodCall('addRequestMatcher', array($matcher));
463
            }
464
        }
465 53
    }
466
467 1
    private function createZoneRequestMatcher(ContainerBuilder $container, $path = null, $host = null, $methods = array(), $ip = null)
468
    {
469 1
        if ($methods) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $methods of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
470
            $methods = array_map('strtoupper', (array) $methods);
471
        }
472
473 1
        $serialized = serialize(array($path, $host, $methods, $ip));
474 1
        $id = 'fos_rest.zone_request_matcher.'.md5($serialized).sha1($serialized);
475
476
        // only add arguments that are necessary
477 1
        $arguments = array($path, $host, $methods, $ip);
478 1
        while (count($arguments) > 0 && !end($arguments)) {
479 1
            array_pop($arguments);
480
        }
481
482 1
        $childDefinitionClass = class_exists(ChildDefinition::class) ? ChildDefinition::class : DefinitionDecorator::class;
483
        $container
484 1
            ->setDefinition($id, new $childDefinitionClass('fos_rest.zone_request_matcher'))
485 1
            ->setArguments($arguments)
486
        ;
487
488 1
        return new Reference($id);
489
    }
490
}
491