Completed
Push — master ( 389562...2321f6 )
by Guilh
8s
created

FOSRestExtension::loadView()   F

Complexity

Conditions 15
Paths 2916

Size

Total Lines 78
Code Lines 46

Duplication

Lines 36
Ratio 46.15 %

Code Coverage

Tests 52
CRAP Score 15.722

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 36
loc 78
ccs 52
cts 61
cp 0.8525
rs 2.1566
cc 15
eloc 46
nc 2916
nop 3
crap 15.722

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 Symfony\Component\Config\FileLocator;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\DefinitionDecorator;
17
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
18
use Symfony\Component\DependencyInjection\Reference;
19
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
20
use Symfony\Component\HttpFoundation\Request;
21
use Symfony\Component\HttpFoundation\Response;
22
23
class FOSRestExtension extends Extension
24
{
25
    /**
26
     * Loads the services based on your application configuration.
27
     *
28
     * @param array            $configs
29
     * @param ContainerBuilder $container
30
     *
31
     * @throws \InvalidArgumentException
32
     * @throws \LogicException
33
     */
34 47
    public function load(array $configs, ContainerBuilder $container)
35
    {
36 47
        $config = $this->processConfiguration(new Configuration(), $configs);
37
38 42
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
39 42
        $loader->load('view.xml');
40 42
        $loader->load('routing.xml');
41 42
        $loader->load('request.xml');
42 42
        $loader->load('serializer.xml');
43
44 42
        $container->getDefinition('fos_rest.routing.loader.controller')->replaceArgument(4, $config['routing_loader']['default_format']);
45 42
        $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(4, $config['routing_loader']['default_format']);
46 42
        $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(4, $config['routing_loader']['default_format']);
47
48 42
        $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(2, $config['routing_loader']['include_format']);
49 42
        $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(2, $config['routing_loader']['include_format']);
50 42
        $container->getDefinition('fos_rest.routing.loader.reader.action')->replaceArgument(3, $config['routing_loader']['include_format']);
51
52
        // The validator service alias is only set if validation is enabled for the request body converter
53 42
        $validator = $config['service']['validator'];
54 42
        unset($config['service']['validator']);
55
56 42
        foreach ($config['service'] as $key => $service) {
57 42
            if (null !== $service) {
58 42
                $container->setAlias('fos_rest.'.$key, $service);
59 42
            }
60 42
        }
61
62 42
        $this->loadForm($config, $loader, $container);
63 42
        $this->loadException($config, $loader, $container);
64 40
        $this->loadBodyConverter($config, $validator, $loader, $container);
65 40
        $this->loadView($config, $loader, $container);
66
67 40
        $this->loadBodyListener($config, $loader, $container);
68 40
        $this->loadFormatListener($config, $loader, $container);
69 40
        $this->loadVersioning($config, $loader, $container);
70 40
        $this->loadParamFetcherListener($config, $loader, $container);
71 40
        $this->loadAllowedMethodsListener($config, $loader, $container);
72 40
        $this->loadAccessDeniedListener($config, $loader, $container);
73 40
        $this->loadZoneMatcherListener($config, $loader, $container);
74
75
        // Needs RequestBodyParamConverter and View Handler loaded.
76 40
        $this->loadSerializer($config, $container);
77 40
    }
78
79 42
    private function loadForm(array $config, XmlFileLoader $loader, ContainerBuilder $container)
80
    {
81 42
        if (!empty($config['disable_csrf_role'])) {
82 1
            $loader->load('forms.xml');
83 1
            $container->getDefinition('fos_rest.form.extension.csrf_disable')->replaceArgument(1, $config['disable_csrf_role']);
84 1
        }
85 42
    }
86
87 40
    private function loadAccessDeniedListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
88
    {
89 40
        if ($config['access_denied_listener']['enabled'] && !empty($config['access_denied_listener']['formats'])) {
90
            $loader->load('access_denied_listener.xml');
91
92
            $service = $container->getDefinition('fos_rest.access_denied_listener');
93
94
            if (!empty($config['access_denied_listener']['service'])) {
95
                $service->clearTag('kernel.event_subscriber');
96
            }
97
98
            $service->replaceArgument(0, $config['access_denied_listener']['formats']);
99
            $service->replaceArgument(1, $config['unauthorized_challenge']);
100
        }
101 40
    }
102
103 40 View Code Duplication
    private function loadAllowedMethodsListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
104
    {
105 40
        if ($config['allowed_methods_listener']['enabled']) {
106 1
            if (!empty($config['allowed_methods_listener']['service'])) {
107
                $service = $container->getDefinition('fos_rest.allowed_methods_listener');
108
                $service->clearTag('kernel.event_listener');
109
            }
110
111 1
            $loader->load('allowed_methods_listener.xml');
112
113 1
            $container->getDefinition('fos_rest.allowed_methods_loader')->replaceArgument(1, $config['cache_dir']);
114 1
        }
115 40
    }
116
117 40
    private function loadBodyListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
118
    {
119 40
        if ($config['body_listener']['enabled']) {
120 39
            $loader->load('body_listener.xml');
121
122 39
            $service = $container->getDefinition('fos_rest.body_listener');
123
124 39
            if (!empty($config['body_listener']['service'])) {
125
                $service->clearTag('kernel.event_listener');
126
            }
127
128 39
            $service->replaceArgument(1, $config['body_listener']['throw_exception_on_unsupported_content_type']);
129 39
            $service->addMethodCall('setDefaultFormat', array($config['body_listener']['default_format']));
130
131 39
            $container->getDefinition('fos_rest.decoder_provider')->replaceArgument(1, $config['body_listener']['decoders']);
132
133 39
            $arrayNormalizer = $config['body_listener']['array_normalizer'];
134
135 39
            if (null !== $arrayNormalizer['service']) {
136 3
                $bodyListener = $container->getDefinition('fos_rest.body_listener');
137 3
                $bodyListener->addArgument(new Reference($arrayNormalizer['service']));
138 3
                $bodyListener->addArgument($arrayNormalizer['forms']);
139 3
            }
140 39
        }
141 40
    }
142
143 40
    private function loadFormatListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
144
    {
145 40
        if ($config['format_listener']['enabled'] && !empty($config['format_listener']['rules'])) {
146 5
            $loader->load('format_listener.xml');
147
148 5
            if (!empty($config['format_listener']['service'])) {
149
                $service = $container->getDefinition('fos_rest.format_listener');
150
                $service->clearTag('kernel.event_listener');
151
            }
152
153 5
            $container->setParameter(
154 5
                'fos_rest.format_listener.rules',
155 5
                $config['format_listener']['rules']
156 5
            );
157
158 5
            if ($config['view']['mime_types']['enabled'] && !method_exists(Request::class, 'getMimeTypes')) {
159 2
                $container->getDefinition('fos_rest.format_negotiator')->addArgument($config['view']['mime_types']['formats']);
160 2
            }
161 5
        }
162 40
    }
163
164 40
    private function loadVersioning(array $config, XmlFileLoader $loader, ContainerBuilder $container)
165
    {
166 40
        if (!empty($config['versioning']['enabled'])) {
167 2
            $loader->load('versioning.xml');
168
169 2
            $versionListener = $container->getDefinition('fos_rest.versioning.listener');
170 2
            $versionListener->replaceArgument(2, $config['versioning']['default_version']);
171
172 2
            $resolvers = [];
173 2 View Code Duplication
            if ($config['versioning']['resolvers']['query']['enabled']) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
174 2
                $resolvers['query'] = $container->getDefinition('fos_rest.versioning.query_parameter_resolver');
175 2
                $resolvers['query']->replaceArgument(0, $config['versioning']['resolvers']['query']['parameter_name']);
176 2
            }
177 2 View Code Duplication
            if ($config['versioning']['resolvers']['custom_header']['enabled']) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
178 2
                $resolvers['custom_header'] = $container->getDefinition('fos_rest.versioning.header_resolver');
179 2
                $resolvers['custom_header']->replaceArgument(0, $config['versioning']['resolvers']['custom_header']['header_name']);
180 2
            }
181 2 View Code Duplication
            if ($config['versioning']['resolvers']['media_type']['enabled']) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
182 2
                $resolvers['media_type'] = $container->getDefinition('fos_rest.versioning.media_type_resolver');
183 2
                $resolvers['media_type']->replaceArgument(0, $config['versioning']['resolvers']['media_type']['regex']);
184 2
            }
185
186 2
            $chainResolver = $container->getDefinition('fos_rest.versioning.chain_resolver');
187 2
            foreach ($config['versioning']['guessing_order'] as $resolver) {
188 2
                if (isset($resolvers[$resolver])) {
189 2
                    $chainResolver->addMethodCall('addResolver', [$resolvers[$resolver]]);
190 2
                }
191 2
            }
192 2
        }
193 40
    }
194
195 40 View Code Duplication
    private function loadParamFetcherListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
196
    {
197 40
        if ($config['param_fetcher_listener']['enabled']) {
198 4
            $loader->load('param_fetcher_listener.xml');
199
200 4
            if (!empty($config['param_fetcher_listener']['service'])) {
201
                $service = $container->getDefinition('fos_rest.param_fetcher_listener');
202
                $service->clearTag('kernel.event_listener');
203
            }
204
205 4
            if ($config['param_fetcher_listener']['force']) {
206 1
                $container->getDefinition('fos_rest.param_fetcher_listener')->replaceArgument(1, true);
207 1
            }
208 4
        }
209 40
    }
210
211 40
    private function loadBodyConverter(array $config, $validator, XmlFileLoader $loader, ContainerBuilder $container)
212
    {
213 40
        if (empty($config['body_converter'])) {
214
            return;
215
        }
216
217 40
        if (!empty($config['body_converter']['enabled'])) {
218 2
            $loader->load('request_body_param_converter.xml');
219
220 2
            if (!empty($config['body_converter']['validation_errors_argument'])) {
221 2
                $container->getDefinition('fos_rest.converter.request_body')->replaceArgument(4, $config['body_converter']['validation_errors_argument']);
222 2
            }
223 2
        }
224
225 40
        if (!empty($config['body_converter']['validate'])) {
226 2
            $container->setAlias('fos_rest.validator', $validator);
227 2
        }
228 40
    }
229
230 40
    private function loadView(array $config, XmlFileLoader $loader, ContainerBuilder $container)
231
    {
232 40
        if (!empty($config['view']['jsonp_handler'])) {
233 1
            $handler = new DefinitionDecorator($config['service']['view_handler']);
234 1
            $handler->setPublic(true);
235
236 1
            $jsonpHandler = new Reference('fos_rest.view_handler.jsonp');
237 1
            $handler->addMethodCall('registerHandler', ['jsonp', [$jsonpHandler, 'createResponse']]);
238 1
            $container->setDefinition('fos_rest.view_handler', $handler);
239
240 1
            $container->getDefinition('fos_rest.view_handler.jsonp')->replaceArgument(0, $config['view']['jsonp_handler']['callback_param']);
241
242 1
            if (empty($config['view']['mime_types']['jsonp'])) {
243 1
                $config['view']['mime_types']['jsonp'] = $config['view']['jsonp_handler']['mime_type'];
244 1
            }
245 1
        }
246
247 40 View Code Duplication
        if ($config['view']['mime_types']['enabled']) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
248 2
            $loader->load('mime_type_listener.xml');
249
250 2
            if (!empty($config['mime_type_listener']['service'])) {
251
                $service = $container->getDefinition('fos_rest.mime_type_listener');
252
                $service->clearTag('kernel.event_listener');
253
            }
254
255 2
            $container->getDefinition('fos_rest.mime_type_listener')->replaceArgument(0, $config['view']['mime_types']['formats']);
256 2
        }
257
258 40 View Code Duplication
        if ($config['view']['view_response_listener']['enabled']) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
259 7
            $loader->load('view_response_listener.xml');
260 7
            $service = $container->getDefinition('fos_rest.view_response_listener');
261
262 7
            if (!empty($config['view_response_listener']['service'])) {
263
                $service->clearTag('kernel.event_listener');
264
            }
265
266 7
            $service->replaceArgument(1, $config['view']['view_response_listener']['force']);
267 7
        }
268
269 40
        $formats = [];
270 40 View Code Duplication
        foreach ($config['view']['formats'] as $format => $enabled) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
271 40
            if ($enabled) {
272 40
                $formats[$format] = false;
273 40
            }
274 40
        }
275 40 View Code Duplication
        foreach ($config['view']['templating_formats'] as $format => $enabled) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
276 40
            if ($enabled) {
277 40
                $formats[$format] = true;
278 40
            }
279 40
        }
280
281 40
        $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(3, $formats);
282 40
        $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(3, $formats);
283 40
        $container->getDefinition('fos_rest.routing.loader.reader.action')->replaceArgument(4, $formats);
284
285 40
        foreach ($config['view']['force_redirects'] as $format => $code) {
286 40
            if (true === $code) {
287 40
                $config['view']['force_redirects'][$format] = Response::HTTP_FOUND;
288 40
            }
289 40
        }
290
291 40 View Code Duplication
        if (!is_numeric($config['view']['failed_validation'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
292
            $config['view']['failed_validation'] = constant('\Symfony\Component\HttpFoundation\Response::'.$config['view']['failed_validation']);
293
        }
294
295 40
        $defaultViewHandler = $container->getDefinition('fos_rest.view_handler.default');
296 40
        $defaultViewHandler->replaceArgument(4, $formats);
297 40
        $defaultViewHandler->replaceArgument(5, $config['view']['failed_validation']);
298
299 40 View Code Duplication
        if (!is_numeric($config['view']['empty_content'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
300
            $config['view']['empty_content'] = constant('\Symfony\Component\HttpFoundation\Response::'.$config['view']['empty_content']);
301
        }
302
303 40
        $defaultViewHandler->replaceArgument(6, $config['view']['empty_content']);
304 40
        $defaultViewHandler->replaceArgument(7, $config['view']['serialize_null']);
305 40
        $defaultViewHandler->replaceArgument(8, $config['view']['force_redirects']);
306 40
        $defaultViewHandler->replaceArgument(9, $config['view']['default_engine']);
307 40
    }
308
309 42
    private function loadException(array $config, XmlFileLoader $loader, ContainerBuilder $container)
310
    {
311 42
        if ($config['exception']['enabled']) {
312 8
            $loader->load('exception_listener.xml');
313
314 8
            if (!empty($config['exception']['service'])) {
315
                $service = $container->getDefinition('fos_rest.exception_listener');
316
                $service->clearTag('kernel.event_subscriber');
317
            }
318
319 8
            if ($config['exception']['exception_controller']) {
320
                $container->getDefinition('fos_rest.exception_listener')->replaceArgument(0, $config['exception']['exception_controller']);
321 8
            } elseif (isset($container->getParameter('kernel.bundles')['TwigBundle'])) {
322 3
                $container->getDefinition('fos_rest.exception_listener')->replaceArgument(0, 'fos_rest.exception.twig_controller:showAction');
323 3
            }
324
325 8
            $container->getDefinition('fos_rest.exception.codes_map')
326 8
                ->replaceArgument(0, $config['exception']['codes']);
327 8
            $container->getDefinition('fos_rest.exception.messages_map')
328 8
                ->replaceArgument(0, $config['exception']['messages']);
329 8
        }
330
331 42
        foreach ($config['exception']['codes'] as $exception => $code) {
332 2
            if (!is_numeric($code)) {
333
                $config['exception']['codes'][$exception] = constant("\Symfony\Component\HttpFoundation\Response::$code");
334
            }
335
336 2
            $this->testExceptionExists($exception);
337 41
        }
338
339 41
        foreach ($config['exception']['messages'] as $exception => $message) {
340 4
            $this->testExceptionExists($exception);
341 40
        }
342 40
    }
343
344 40
    private function loadSerializer(array $config, ContainerBuilder $container)
345
    {
346 40
        $bodyConverter = $container->hasDefinition('fos_rest.converter.request_body') ? $container->getDefinition('fos_rest.converter.request_body') : null;
347 40
        $viewHandler = $container->getDefinition('fos_rest.view_handler.default');
348
349 40 View Code Duplication
        if (!empty($config['serializer']['version'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
350 1
            if ($bodyConverter) {
351
                $bodyConverter->replaceArgument(2, $config['serializer']['version']);
352
            }
353 1
            $viewHandler->addMethodCall('setExclusionStrategyVersion', array($config['serializer']['version']));
354 1
        }
355
356 40 View Code Duplication
        if (!empty($config['serializer']['groups'])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
357 1
            if ($bodyConverter) {
358
                $bodyConverter->replaceArgument(1, $config['serializer']['groups']);
359
            }
360 1
            $viewHandler->addMethodCall('setExclusionStrategyGroups', array($config['serializer']['groups']));
361 1
        }
362
363 40
        $viewHandler->addMethodCall('setSerializeNullStrategy', array($config['serializer']['serialize_null']));
364 40
    }
365
366 40
    private function loadZoneMatcherListener(array $config, XmlFileLoader $loader, ContainerBuilder $container)
367
    {
368 40
        if (!empty($config['zone'])) {
369 1
            $loader->load('zone_matcher_listener.xml');
370 1
            $zoneMatcherListener = $container->getDefinition('fos_rest.zone_matcher_listener');
371
372 1
            foreach ($config['zone'] as $zone) {
373 1
                $matcher = $this->createZoneRequestMatcher($container,
374 1
                    $zone['path'],
375 1
                    $zone['host'],
376 1
                    $zone['methods'],
377 1
                    $zone['ips']
378 1
                );
379
380 1
                $zoneMatcherListener->addMethodCall('addRequestMatcher', array($matcher));
381 1
            }
382 1
        }
383 40
    }
384
385 1
    private function createZoneRequestMatcher(ContainerBuilder $container, $path = null, $host = null, $methods = array(), $ip = null)
386
    {
387 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...
388
            $methods = array_map('strtoupper', (array) $methods);
389
        }
390
391 1
        $serialized = serialize(array($path, $host, $methods, $ip));
392 1
        $id = 'fos_rest.zone_request_matcher.'.md5($serialized).sha1($serialized);
393
394
        // only add arguments that are necessary
395 1
        $arguments = array($path, $host, $methods, $ip);
396 1
        while (count($arguments) > 0 && !end($arguments)) {
397 1
            array_pop($arguments);
398 1
        }
399
400
        $container
401 1
            ->setDefinition($id, new DefinitionDecorator('fos_rest.zone_request_matcher'))
402 1
            ->setArguments($arguments)
403
        ;
404
405 1
        return new Reference($id);
406
    }
407
408
    /**
409
     * Checks if an exception is loadable.
410
     *
411
     * @param string $exception Class to test
412
     *
413
     * @throws \InvalidArgumentException if the class was not found.
414
     */
415 6
    private function testExceptionExists($exception)
416
    {
417 6
        if (!is_subclass_of($exception, \Exception::class) && !is_a($exception, \Exception::class, true)) {
0 ignored issues
show
Bug introduced by
Due to PHP Bug #53727, is_subclass_of might return inconsistent results on some PHP versions if \Exception::class can be an interface. If so, you could instead use ReflectionClass::implementsInterface.
Loading history...
418 2
            throw new \InvalidArgumentException("FOSRestBundle exception mapper: Could not load class '$exception' or the class does not extend from '\Exception'. Most probably this is a configuration problem.");
419
        }
420 4
    }
421
}
422