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
12namespace Symfony\Component\DependencyInjection\Loader;
13
14/**
15 * DirectoryLoader is a recursive loader to go through directories.
16 *
17 * @author Sebastien Lavoie <seb@wemakecustom.com>
18 */
19class DirectoryLoader extends FileLoader
20{
21    /**
22     * {@inheritdoc}
23     */
24    public function load($file, $type = null)
25    {
26        $file = rtrim($file, '/');
27        $path = $this->locator->locate($file);
28        $this->container->fileExists($path, false);
29
30        foreach (scandir($path) as $dir) {
31            if ('.' !== $dir[0]) {
32                if (is_dir($path.'/'.$dir)) {
33                    $dir .= '/'; // append / to allow recursion
34                }
35
36                $this->setCurrentDir($path);
37
38                $this->import($dir, null, false, $path);
39            }
40        }
41    }
42
43    /**
44     * {@inheritdoc}
45     */
46    public function supports($resource, $type = null)
47    {
48        if ('directory' === $type) {
49            return true;
50        }
51
52        return null === $type && \is_string($resource) && '/' === substr($resource, -1);
53    }
54}
55