f82c40000239cb8fcec1fe7ce165f25e9e9aae8a
[yaffs-website] / vendor / symfony / validator / Mapping / Loader / LoaderChain.php
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\Validator\Mapping\Loader;
13
14 use Symfony\Component\Validator\Exception\MappingException;
15 use Symfony\Component\Validator\Mapping\ClassMetadata;
16
17 /**
18  * Loads validation metadata from multiple {@link LoaderInterface} instances.
19  *
20  * Pass the loaders when constructing the chain. Once
21  * {@link loadClassMetadata()} is called, that method will be called on all
22  * loaders in the chain.
23  *
24  * @author Bernhard Schussek <bschussek@gmail.com>
25  */
26 class LoaderChain implements LoaderInterface
27 {
28     protected $loaders;
29
30     /**
31      * @param LoaderInterface[] $loaders The metadata loaders to use
32      *
33      * @throws MappingException If any of the loaders has an invalid type
34      */
35     public function __construct(array $loaders)
36     {
37         foreach ($loaders as $loader) {
38             if (!$loader instanceof LoaderInterface) {
39                 throw new MappingException(sprintf('Class %s is expected to implement LoaderInterface', get_class($loader)));
40             }
41         }
42
43         $this->loaders = $loaders;
44     }
45
46     /**
47      * {@inheritdoc}
48      */
49     public function loadClassMetadata(ClassMetadata $metadata)
50     {
51         $success = false;
52
53         foreach ($this->loaders as $loader) {
54             $success = $loader->loadClassMetadata($metadata) || $success;
55         }
56
57         return $success;
58     }
59
60     /**
61      * @return LoaderInterface[]
62      */
63     public function getLoaders()
64     {
65         return $this->loaders;
66     }
67 }