1: <?php
 2: 
 3: /*
 4:  * This file is part of the Symfony package.
 5:  *
 6:  * (c) Fabien Potencier <fabien@symfony.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 Symfony\Component\Config\Loader;
13: 
14: use Symfony\Component\Config\Exception\FileLoaderLoadException;
15: 
16: /**
17:  * DelegatingLoader delegates loading to other loaders using a loader resolver.
18:  *
19:  * This loader acts as an array of LoaderInterface objects - each having
20:  * a chance to load a given resource (handled by the resolver)
21:  *
22:  * @author Fabien Potencier <fabien@symfony.com>
23:  */
24: class DelegatingLoader extends Loader
25: {
26:     /**
27:      * Constructor.
28:      *
29:      * @param LoaderResolverInterface $resolver A LoaderResolverInterface instance
30:      */
31:     public function __construct(LoaderResolverInterface $resolver)
32:     {
33:         $this->resolver = $resolver;
34:     }
35: 
36:     /**
37:      * Loads a resource.
38:      *
39:      * @param mixed  $resource A resource
40:      * @param string $type     The resource type
41:      *
42:      * @return mixed
43:      *
44:      * @throws FileLoaderLoadException if no loader is found.
45:      */
46:     public function load($resource, $type = null)
47:     {
48:         if (false === $loader = $this->resolver->resolve($resource, $type)) {
49:             throw new FileLoaderLoadException($resource);
50:         }
51: 
52:         return $loader->load($resource, $type);
53:     }
54: 
55:     /**
56:      * {@inheritdoc}
57:      */
58:     public function supports($resource, $type = null)
59:     {
60:         return false === $this->resolver->resolve($resource, $type) ? false : true;
61:     }
62: }
63: