pragmarx/yaml

Load your Laravel config files using yaml

Package info

github.com/antonioribeiro/yaml

pkg:composer/pragmarx/yaml

Statistics

Installs: 2 832 055

Dependents: 31

Suggesters: 0

Stars: 114

Open Issues: 3

v1.3.1 2024-09-27 13:42 UTC

Requires

Requires (Dev)

Suggests

  • ext-yaml: Required to use the PECL YAML.

Provides

None

Conflicts

None

Replaces

None

MIT 981cb2957fe50ea630ad6546143a4e14b6fc7983

  • Antonio Carlos Ribeiro <acr.woop@antoniocarlosribeiro.com>

yamlconfiglaravel

This package is auto-updated.

Last update: 2026-06-27 18:00:51 UTC


README

A Laravel YAML parser and config loader

👁 Image

👁 Latest Stable Version
👁 License
👁 Code Quality
👁 Build

👁 Coverage
👁 StyleCI
👁 SensioLabsInsight

Rationale

Config files getting bigger, harder to maintain and look at, every day. Why not just use YAML to load them?

Which one is cleaner?

👁 Image

Key features

Load one file to Laravel config

Yaml::loadToConfig(config_path('myapp.yml'), 'my-app-conf');

Or a whole directory, recursively, so all those files would be loaded with a single command

Yaml::loadToConfig(config_path('myapp'), 'my-app-conf');

To load a directory with all your config files:

.
└── myapp
 ├── multiple
 │ ├── alter.yml
 │ ├── app.yml
 │ └── second-level
 │ └── third-level
 │ ├── alter.yml
 │ └── app.yml
 ├── single
 └── single-app.yml

Then you would just have to use it like you usually do in Laravel

config('my-app-conf.multiple.second-level.third-level.alter.person.name')

Execute functions, like in the usual Laravel PHP array config.

repository: "{{ env('APP_NAME') }}"
path: "{{ storage_path('app') }}"

Config values can reference config keys, you just have to quote it this way:

{{'format.version'}}

You can add comments to your YAML files, something JSON wouldn't let you do

build:
 mode: git-local #### other modes: git-remote or number

Parser and dumper methods

In case you need to deal with YAML directly, you can use these public methods:

Yaml::parse($input, $flags) // Parses YAML into a PHP value.

Yaml::parseFile($filename, $flags) // Parses a YAML file into a PHP value.

Yaml::dump($input, $inline, $indent, $flags) // Dumps a PHP value to a YAML string.

Which are simple bridges to Symfony's YAML.

Install

Via Composer

$ composer require pragmarx/yaml

Using

Publish your package as you would usually do:

$this->publishes([
 __DIR__.'/../config/version.yml' => $this->getConfigFile(),
]);

Load the configuration in your boot() method:

$this->app
 ->make('pragmarx.yaml')
 ->loadToConfig($this->getConfigFile(), 'my-package');

Or use the Facade:

Yaml::loadToConfig(config_path('myapp.yml'), 'my-package');

And it's merged to your Laravel config:

config('my-package.name');

Utilize PECL YAML

To utilize the PECL YAML, you should install the PECL YAML extension and register the binding in the register() method of your service provider:

$this->app->bind(\PragmaRX\Yaml\Package\Support\Parser::class, \PragmaRX\Yaml\Package\Support\PeclParser::class);

Example

This is a YAML file from another package using this package:

current:
 major: 1
 minor: 0
 patch: 0
 format: "{$major}.{$minor}.{$patch}"
cache:
 enabled: true
 key: pragmarx-version
build:
 mode: git-local # git-remote or number
 number: 701031
 git-local: "git rev-parse --verify HEAD"
 git-remote: "git ls-remote {$repository} refs/heads/master"
 repository: "{{ env('APP_GIT_REPOSITORY') }}"
 length: 6
format:
 version: "{$major}.{$minor}.{$patch} (build {$build})"
 full: "version {{'format.version'}}"
 compact: "v{$major}.{$minor}.{$patch}-{$build}"
 ## add as many formats as you need

Minimum requirements

  • Laravel 5.5
  • PHP 7.0

Author

Antonio Carlos Ribeiro

License

This package is licensed under the MIT License - see the LICENSE file for details

Contributing

Pull requests and issues are welcome.