filp / gimme
dev-master
2013-08-10 13:17 UTC
Requires
- php: >=5.3
Requires (Dev)
- mockery/mockery: dev-master@dev
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