{{TOC}} Одна из новых возможностей **Laravel 3.1** - отслеживание ((док3:events события)) %%Config::loader%%, а через него - управление процессом загрузки конфигурационных файлов. Нам потребуется совсем немного кода, чтобы использовать этот //крючок// ("hook") для добавления поддержки настроек в формате %%(t).yaml%% с сохранением стандартной загрузки настроек в %%.php%%. == Установка YAML == Перед тем, как мы сможем использовать ((ВП:YAML)) нам нужен его парсер под PHP. Самый лучший и простой в использовании из знакомых мне находится в библиотеке **Symfony**. Мы можем установить этот компонент используя **((http://getcomposer.org Composer))** - если у вас он ещё не установлен сделайте это, как описано в моей статье "((10))". Теперь когда у вас есть //Composer// отредактируйте файл **composer.json** в папке установки Laravel: %%(json) { "require": { "php": ">=5.3.0", "symfony/yaml": "2.0.*" } } %% Далее запустите установку этого компонента, либо, если он уже установлен - его обновление: %%(sh) cd /path/to/my/project php composer.phar install # либо: php composer.phar update %% Теперь компонент //YAML// должен быть готов к работе. == Регистрация YAML == Перед тем, как мы можем использовать парсер //YAML// нам нужно зарегистрировать его в нашем ((док3:ioc IoC-контейнере)). Сделаем это добавив этот код d **application/start.php**: %% IoC::singleton('yaml_parser', function () { return new \Symfony\Component\Yaml\Parser(); }); IoC::singleton('yaml_dumper', function () { return new \Symfony\Component\Yaml\Dumper(); }); %% Мы только что зарегистрировали два класса //YAML//: **Dumper** и **Parser** в ((док3:ioc контейнере IoC)) - благодаря этому мы сможем получать экземпляр парсера в любом месте нашего кода одним простым вызовом: %% $parser = IoC::resolve('yaml_parser'); %% == Событие загрузки == Настало время установить обработчик для события %%Config::loader%%, упомянутого в начале статьи. Нам нужно сделать так, чтобы вместо функции %%Laravel\Config::file()%% вызывалась наша собственная функция - %%MyConfig::file()%%. Это делается в файле **application/start.php**. Технчески мы могли бы полностью заменить процесс загрузки файла, но нам всего лишь нужно немного расширить его функциональность. Итак... вот наш код в %%(t)start.php%%: %% /* |-------------------------------------------------------------------------- | Laravel Configuration Loader |-------------------------------------------------------------------------- | | The Laravel configuration loader is responsible for returning an array | of configuration options for a given bundle and file. By default, we | use the files provided with Laravel; however, you are free to use | your own storage mechanism for configuration arrays. | */ Laravel\Event::listen(Laravel\Config::loader, function ($bundle, $file) { require_once path('app').'libraries'.DS.'myconfig.php'; return MyConfig::file($bundle, $file); // return Laravel\Config::file($bundle, $file); }); %% Вам может показаться странным наличие здесь **require_once**, однако ((док3:loading автозагрузчик Laravel)) инициализируется позже в процессе запуска и если бы мы зарегистрировали автозагрузку для нашего %%(t)myconfig.php%%, то регистрация бы произошла дважды, так как папка **libraries** тоже регистрируется. == MyConfig::file() == Это место, где мы //расширяем//, или, технически, //перекрываем// стандартный обработчик %%Laravel\Config::file()%%. Вот наш **libraries/myconfig.php**: %% parse($contents)); } } } return $config; } } %% == Послесловие == Итак, теперь мы моем помещать настройки в файлы %%(t).yaml%% и %%(t).php%%. Не требуется вносить изменений в вызовы %%Config::get()%% - всё делается как обычно. А если вы немного постараетесь, то сможете добавить любые другие парсеры в наш блок **if..else**.