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.
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.
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:
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');
}
]
}
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';
}
]
}
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;
}
]
}