filp/gimme

dev-master 2013-08-10 13:17 UTC

This package is not auto-updated.

Last update: 2024-09-09 11:52:55 UTC


README

魔法 注入您的服务。

一个超级简单的库,可以从 $services 参数自动注入命名服务。服务来自服务提供者,可以通过简单的堆栈布局引入Gimme。

* 或者不这么做,请查看 Gimme\Resolver::setArgumentName

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

特性

  • 轻量级、经过测试的代码库。

  • 通过 $services 参数实现无需干预的服务注入

  • 实现对任何类型的服务提供者的支持非常简单

  • 您的可调用/方法的参数被保留,因此它与那些现代太空时代框架非常匹配

    // warning: example may not make much sense
    $app->get('/user/{id}', $resolver->bind(function($id, $services = array('user') {
        return $services->user->get($id);
    }));
  • 服务提供者可能是一个简单的闭包

    $resolver->pushProvider(function($serviceName) {
        if($serviceName == 'bananas') {
            return 'Here, have some bananas!';
        }
    });
  • 支持可调用绑定(将您的可调用绑定到方法注入器,并在需要时调用它)。

    $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);
  • 支持服务名称别名

    $resolver->alias('bananaService', 'turnipService');
    $resolver->call(function($services = array('bananaService')) {
        print "I love {$services->bananaService->name()}!"; #=> I love turnip!
    });

我应该使用这个吗?

不知道。编写它很有趣,但我不打算告诉你使用它。代码是可靠的,如果你有理由根据自己的需求使用它,那是一个你自己的理由。

安装它

使用 Composer,将以下内容添加到您的 composer.json

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

然后

$ composer install