Загрузка источников

Caution

IniFileLoader анализирует содержание файла, используя функцию parse_ini_file. Следовательно, вы можете устанаваливать параметры только в виде значений строки. Чтобы установить параметры в других типах данных (например, булевом, числовом и др.), рекомендуется использовать другие загрузчики.

Обнаружение источников

Загрузка конфигурации обычно начинается с поиска источников, в основном, файлов. Это можно сделать с помощью FileLocator:

1
2
3
4
5
6
use Symfony\Component\Config\FileLocator;

$configDirectories = array(__DIR__.'/config');

$fileLocator = new FileLocator($configDirectories);
$yamlUserFiles = $fileLocator->locate('users.yaml', null, false);

Указатель получает коллекцию локаций, где ему стоит искать файлы. Первый аргумент locate() - это имя файла, который нужно искать. Второй аргумент может быть текущим путём и если он есть, указатель будет вначале искать в этом каталоге. Третий аргумент определяет, нужно ли указателю возвращать первый найденный файл или массив, содержащий все совпадения.

Загрузчики источнков

Для каждого типа источника (YAML, XML, аннотация, и др.) должен быть определён загрузчик. Каждый загрузчик должен реализовать LoaderInterface или расширять абстрактный класс FileLoader, который позволяе рекурсивный импорт других источников:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use Symfony\Component\Config\Loader\FileLoader;
use Symfony\Component\Yaml\Yaml;

class YamlUserLoader extends FileLoader
{
    public function load($resource, $type = null)
    {
        $configValues = Yaml::parse(file_get_contents($resource));

        // ... обработать значения конфигурации

        // возможно импортировать другие источники;

        // $this->import('extra_users.yaml');
    }

    public function supports($resource, $type = null)
    {
        return is_string($resource) && 'yaml' === pathinfo(
            $resource,
            PATHINFO_EXTENSION
        );
    }
}

Поиск правильного загрузчика

LoaderResolver получает в качестве своего первого аргумента коллекцию загрузчиков. Когда источник (к примеру, XML файл) должен быть загружен, он просматривает эту коллекцию загрузчиков и возвращает тот, который поддерживает конкретный тип источника.

DelegatingLoader использует LoaderResolver. Когд его просят загрузить источник, он делегирует этот вопрос LoaderResolver. В случае, если разрешитель нашел подходящий загрузчик, то его попросят загрузить источник:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Config\Loader\LoaderResolver;
use Symfony\Component\Config\Loader\DelegatingLoader;

$loaderResolver = new LoaderResolver(array(new YamlUserLoader($fileLocator)));
$delegatingLoader = new DelegatingLoader($loaderResolver);

// YamlUserLoader используется для загрузки этого источника, потому что
// он поддерживает файлы с расширением '.yaml'
$delegatingLoader->load(__DIR__.'/users.yaml');

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.