2017 © Pedro Peláez
 

library gimme

image

filp/gimme

  • Saturday, August 10, 2013
  • by filp
  • Repository
  • 1 Watchers
  • 2 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

gimme Build Status

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
});

Features:

  • Light-weight, tested code-base.
  • Hands-off service injection through the $services argument
  • Stupid-simple to implement support for any type of service provider
  • 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!
    });
    

Should I use this?

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)

Install it:

Use Composer, add the following to your composer.json:, (*9)

{
    "require": {
        "filp/gimme": "dev-master"
    }
}

And then:, (*10)

$ composer install

The Versions

10/08 2013

dev-master

9999999-dev

  Sources   Download

MIT

The Requires

  • php >=5.3

 

The Development Requires