2017 © Pedro Peláez
 

library zend-expressive-config

Zend Expressive config manager

image

zelenin/zend-expressive-config

Zend Expressive config manager

  • Tuesday, August 29, 2017
  • by zelenin
  • Repository
  • 3 Watchers
  • 6 Stars
  • 745 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 10 Versions
  • 3 % Grown

The README.md

Zend Expressive config manager Build Status Coverage Status

Installation

Composer

The preferred way to install this extension is through Composer., (*1)

Either run, (*2)

php composer.phar require zelenin/zend-expressive-config "~2.1.0"

or add, (*3)

"zelenin/zend-expressive-config": "~2.1.0"

to the require section of your composer.json, (*4)

Usage

Config providers

  • PHP
  • Yaml
  • Arrays
  • Collections
  • Module config objects

Example

<?php

use Zelenin\FooModule\Config\FooModuleConfig;
use Zelenin\Zend\Expressive\Config\ConfigManager;
use Zelenin\Zend\Expressive\Config\Provider\ArrayProvider;
use Zelenin\Zend\Expressive\Config\Provider\CacheProvider;
use Zelenin\Zend\Expressive\Config\Provider\PhpProvider;
use Zelenin\Zend\Expressive\Config\Provider\YamlProvider;
use Zelenin\Zend\Expressive\Config\Provider\AnnotationProvider;

$productionMode = true; // environment variable

$providers =  [
    new PhpProvider(__DIR__ . '/../config/autoload/*.global.php'),
    new PhpProvider(__DIR__ . '/../config/autoload/*.local.php'),
    new YamlProvider(__DIR__ . '/../config/autoload/*.global.yml'),
    new YamlProvider(__DIR__ . '/../config/autoload/*.local.yml'),
    new AnnotationProvider(__DIR__ . '/../src', __DIR__ . '/../data/cache/factories'),
    new ArrayProvider(['foo' => 'bar']),
    new FooModuleConfig(),
];

if ($productionMode) {
    $providers = [new CacheProvider(__DIR__ . '/../data/cache/app-config.php', $providers)];
}

$manager = new ConfigManager($providers);
$config = $manager->getConfig();

Module config example:, (*5)

namespace Zelenin\FooModule\Config;

use Zelenin\Zend\Expressive\Config\Provider\ModuleConfigProvider;
use Zelenin\Zend\Expressive\Config\Provider\CollectionProvider;
use Zelenin\Zend\Expressive\Config\Provider\PhpProvider;
use Zelenin\Zend\Expressive\Config\Provider\YamlProvider;

final class FooModuleConfig extends ModuleConfigProvider
{
    /**
     * @return array
     */
    public function getConfig()
    {
        return [
            'foo' => 'bar'
        ];

        // or

        return require_once 'fooModuleConfig.php';

        // or

        return (new CollectionProvider([
            new PhpProvider(__DIR__ . '/../Resources/config/*.global.php')),
            new PhpProvider(__DIR__ . '/../Resources/config/*.local.php')),
            new YamlProvider(__DIR__ . '/../Resources/config/*.global.yml'))
            new YamlProvider(__DIR__ . '/../Resources/config/*.local.yml'))
        ]))->getConfig();
    }
}

Variables in YAML

You can resolve a variables like in the example below., (*6)

Config:, (*7)

dependencies:
    factories:
        Zend\Stratigility\FinalHandler: 'Zend\Expressive\Container\TemplatedErrorHandlerFactory'
        Zend\Expressive\Template\TemplateRendererInterface: 'Zend\Expressive\Twig\TwigRendererFactory'

twig:
    cache_dir: '%rootDir%/data/cache/twig'
    assets_url: '/'
    assets_version: 1
    globals: []
    extensions: []

templates:
    extension: 'html.twig'
    paths:
        application:
            - '%moduleRootDir%/Resources/views'

Provider:, (*8)

<?php
declare(strict_types=1);

namespace Zelenin\Application\Config;

use ArrayObject;
use Zelenin\Zend\Expressive\Config\Provider\CollectionProvider;
use Zelenin\Zend\Expressive\Config\Provider\ModuleConfigProvider;
use Zelenin\Zend\Expressive\Config\Provider\YamlProvider;

final class Provider extends ModuleConfigProvider
{
    /**
     * @return array
     */
    public function getConfig(): array
    {
        return $this->resolveVariables(
            (new CollectionProvider([
                new YamlProvider(__DIR__ . '/../Resources/config/*.global.yml'),
                new YamlProvider(__DIR__ . '/../Resources/config/*.local.yml'),
            ]))->getConfig()
        );
    }

    /**
     * @param array $config
     *
     * @return array
     */
    private function resolveVariables(array $config): array
    {
        $variableRegistry = $this->getVariablesRegistry();

        array_walk_recursive($config, function (&$value, $key) use ($variableRegistry) {
            if (is_string($value)) {
                if (preg_match('/%(.+)%/', $value, $matches)) {
                    $variable = $matches[1];
                    if (isset($variableRegistry[$variable])) {
                        $value = preg_replace('/%(.+)%/', $variableRegistry[$variable], $value);
                    }
                }
            }
        });

        return $config;
    }

    /**
     * @return array
     */
    private function getVariablesRegistry(): array
    {
        return [
            'rootDir' => realpath(__DIR__ . '/../../..'),
            'moduleRootDir' => realpath(__DIR__ . '/..'),
        ];
    }
}

Annotations

Supported annotations:, (*9)

  • @Factory(id=Service::class)
  • @Invokable(id=InvokableService::class)
  • @Inject
  • @Middleware(path="/path")
  • @Route(path="/path", methods={"GET", "POST"}, name="route-name")

NB: @Middleware and @Route works only with programmatic_pipeline=false, (*10)

Usage: see examples in Tests, (*11)

Author

Aleksandr Zelenin, e-mail: aleksandr@zelenin.me, (*12)

The Versions

29/08 2017

dev-master

9999999-dev https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

29/08 2017

2.1.1

2.1.1.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

05/06 2017

2.1.0

2.1.0.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

30/05 2017

2.0.0

2.0.0.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

12/02 2017

1.2.1

1.2.1.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

25/05 2016

1.2.0

1.2.0.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

20/05 2016

1.1.0

1.1.0.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

 

The Development Requires

config zend expressive

19/05 2016

1.0.0

1.0.0.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

  • php >=5.4

 

The Development Requires

config zend expressive

21/02 2016

0.0.2

0.0.2.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

  • php >=5.4

 

zend expressive confog

21/02 2016

0.0.1

0.0.1.0 https://github.com/zelenin/zend-expressive-config

Zend Expressive config manager

  Sources   Download

MIT

The Requires

  • php >=5.5

 

zend expressive confog