dev-master
9999999-dev
MIT
The Requires
- php >=5.3
The Development Requires
Wallogit.com
2017 © Pedro Peláez
Inject your services with magic., (*1)
A super-simple library to auto-magically inject named services from a $services* argument. Services
come from service providers, that can be introduced to Gimme through a simple stack layout., (*2)
* Or not, have a look at Gimme\Resolver::setArgumentName, (*3)
<?php
use Gimme\Resolver;
use Pimple;
use Foo;
// Create a service provider, for this example, using Pimple:
$pimple = new Pimple;
$pimple['myService'] = function() {
return new Foo;
};
// Introduce the provider to Gimme, wrapping it in a closure
// that knows how to talk to Pimple:
$resolver = new Resolver;
$resolver->pushProvider(
function($serviceName) use($pimple) { return $pimple[$serviceName]; };
);
// Use it. Tell Gimme that this callable (which can be a closure, a function
// or a method) wants to use a service called 'myService', which one of the
// registered service providers will be able to fetch for you.
$resolver->call(function($services = array('myService')) {
var_dump($services->myService); #=> instance of Foo
});
Your callable/method's arguments are preserved, so it's a great fit with those modern space-age frameworks, (*4)
// warning: example may not make much sense
$app->get('/user/{id}', $resolver->bind(function($id, $services = array('user') {
return $services->user->get($id);
}));
Service providers may be a simple closure:, (*5)
$resolver->pushProvider(function($serviceName) {
if($serviceName == 'bananas') {
return 'Here, have some bananas!';
}
});
Support for callable-binding (bind your callable to the method injector, call it whenever)., (*6)
$bound = $resolver->bind(function($services = array('someService')) {
return $services->someService->doThings();
});
// Give the bound method to your killer router of sorts:
$app->get('/foo', $bound);
Support for service-name aliases:, (*7)
$resolver->alias('bananaService', 'turnipService');
$resolver->call(function($services = array('bananaService')) {
print "I love {$services->bananaService->name()}!"; #=> I love turnip!
});
Dunno. It was fun to work on, but I'm not going to be the one to tell you to use it. The code is solid, if there's a point in using it for your needs, it's a point for you to make., (*8)
Use Composer, add the following to your composer.json:, (*9)
{
"require": {
"filp/gimme": "dev-master"
}
}
And then:, (*10)
$ composer install
MIT