thecodingmachine/common-factories

This project provides utility factories that can be used directly in service providers complying with the container-interop/service-provider standard.

Installs: 192 036

Dependents: 9

Suggesters: 0

Security: 0

Stars: 1

Watchers: 1

Forks: 1

Open Issues: 0

pkg:composer/thecodingmachine/common-factories

v0.4.1 2018-08-17 21:27 UTC

This package is auto-updated.

Last update: 2025-10-07 02:06:32 UTC


README

Scrutinizer Code Quality Build Status Coverage Status

Utility factories for container-interop/service-provider

Work in progress.

This project is part of the container-interop group. It tries to find a solution for cross-framework modules (aka bundles) by the means of container-agnostic configuration.

Goal of this project

This project provides utility factories that can be used directly in service providers complying with the container-interop/service-provider standard.

Those common factories can be detected by compiled/cached containers. The aim of this package is to offer a common set of useful classes that can also be preprocessed by optimized containers for best performance.

Usage

Simply require this package in your package declaring your service-provider:

So far, the package has the thecodingmachine vendor name. It will hopefully be migrated to container-interop/common-factories

composer require thecodingmachine/common-factories

Then, you can use one of the 3 available classes:

Creating an alias

Use the Alias class to easily create an alias.

public function getFactories() {
    return [
        'myAlias' => new Alias('myService')
    ]
}

can easily replace:

public function getFactories() {
    return [
        'myAlias' => function(ContainerInterface $container) {
            return $container->get('myService');
        }
    ]
}

Creating a parameter

Use the Parameter class to put in the container a scalar (or array of scalar) entry:

public function getFactories() {
    return [
        'DB_HOST' => new Parameter('localhost')
    ]
}

can easily replace:

public function getFactories() {
    return [
        'DB_HOST' => function() {
            return 'localhost';
        }
    ]
}

Appending a service to an array of services

Use the AddToArray class to push a new service to an existing array:

public function getExtensions() {
    return [
        MyTwigExtension::class => function() {
            return new MyTwigExtension();
        },
        'twig.extensions' => new AddToArray(MyTwigExtension::class)
    ]
}

can easily replace:

public function getExtensions() {
    return [
        MyTwigExtension::class => function() {
            return new MyTwigExtension();
        },
        'twig.extensions' => function(ContainerInterface $container, array $extensions = []) {
            $extensions[] = $container->get(MyTwigExtension::class);
            return $extensions;
        }
    ]
}