今天:2017-07-16
本文是对pimple框架的翻译,真是轻松愉快,因为文档十分简短而且简单。
另外,这是一个非常好用的框架,建议同学们尽量使用。
学习pimple的两大好处:
1、很多php框架都已经用到了pimple,本身就需要学习使用方法。
2、项目中如本来没有pimple,可以主动使用pimple,则做项目的单元测试时就可以轻松替换外部环境。
正文如下
官方文档原地址:
https://pimple.symfony.com/
pimple | 一个简单的php依赖注入容器
这是 pimple 3.x 的文档,如果你正在使用 pimple 1.x,请阅读 pimple 1.x 的文档。阅读 pimple 1.x 的源代码也是一个学习关于如何创建 pimple 1.x 的容器的好方法。(当前版本的pimple更多关注了性能)
pimple 是一个很小的php的依赖注入容器。
安装
在应用 pimple 到你的项目之前,先把下面的代码加入到你的 composer.json。(译注:只要在 shell 执行这个命令即可)
$ ./composer.phar require pimple/pimple ~3.0
或者,pimple 也可以作为php的c扩展获得
$ git clone https://github.com/silexphp/Pimple
$ cd Pimple/ext/pimple
$ phpize
$ ./configure
$ make
$ make install
用法
创建容器基本上就是创建一个
container实例。
use Pimple\Container;
$container = new Container();
就象一些其他的依赖注入容器一样,pimple 管理着两种不同类型的数据:服务(services)和参数(parameters)(译注:参数就是一般项目的里的配置文件的参数,服务就是一个全局对象)
定义服务
服务作为一个更大系统(译注:即我们的一个项目)的一部分,就是一个可以做一些事情的对象。例如:一个数据库连接,一个模板引擎,一个邮件发送器,几乎任何全局对象都可以作为一个服务。
服务被一个匿名函数定义,并返回一个对象的实例。
// define some services
$container['session_storage'] = function ($c) {
return new SessionStorage('SESSION_ID');
};
$container['session'] = function ($c) {
return new Session($c['session_storage']);
};
注意到这个匿名函数可以访问当前容器的实例,也可以引用别的服务或参数。
一个对象只会在你想使用他们的时候才会创建,所以定义的顺序无关紧要。
使用定义好的服务是很容易的:
// get the session object 得到session对象
$session = $container['session'];
// the above call is roughly equivalent to the following code:
// 上面这个调用大体上等同于下面的代码
// $storage = new SessionStorage('SESSION_ID');
// $session = new Session($storage);
定义工厂服务
默认的,每次你得到一个服务,pimple 返回相同的实例。如果你想要每次调用返回一个不同的实例,用工厂方法包装你的匿名函数
$container['session'] = $container->factory(function ($c) {
return new Session($c['session_storage']);
});
现在每次调用 $container['session'] 返回一个新的会话实例。
定义参数
定义参数可以让你很容易的从外部配置你的容器,并存储到全局变量里。
// define some parameters 定义一些参数
$container['cookie_name'] = 'SESSION_ID';
$container['session_storage_class'] = 'SessionStorage';
如果你想想改变
session_storage 服务,可以象下面这样。
$container['session_storage'] = function ($c) {
return new $c['session_storage_class']($c['cookie_name']);
};
现在你可以通过覆盖 session_storage_class 参数而不是重新定义这个服务,来很容易的改变 cookie name。
保护参数
因为 pimple 用匿名函数定义服务,你需要用 protect 方法包装匿名函数来存储参数(译注:我估计就是只能定义一次,不能再改了)
$container['random_func'] = $container->protect(function () {
return rand();
});
定义后再修改服务
在一些例子中,你可能想要修改一个定义过的服务,你可以使用extend 方法来添加定义代码,在这个服务的实例已被创建出来的情况下。
$container['session_storage'] = function ($c) {
return new $c['session_storage_class']($c['cookie_name']);
};
$container->extend('session_storage', function ($storage, $c) {
$storage->...();
return $storage;
});
第一个参数是延伸的服务的名字,第2个函数可以访问对象实例和容器。
扩展容器
如果你一次次的使用同样的类库,你可能想要把这些代码抽取出来,以复用到你的下个项目,打包你的服务,通过实现接口 Pimple\ServiceProviderInterface:
use Pimple\Container;
class FooProvider implements Pimple\ServiceProviderInterface
{
public function register(Container $pimple)
{
// register some services and parameters
// on $pimple
}
}
然后,在容器里注册这个提供者。
$pimple->register(new FooProvider());
提取定义时创建的函数
当你访问一个对象时,pimple 会自动调用你定义的匿名函数,它会为你创建服务对象。如果你想获得原生函数,您可以使用raw()方法:
$container['session'] = function ($c) {
return new Session($c['session_storage']);
};
$sessionFunction = $container->raw('session');
谁在支持 pimple
pimple 是 symfony框架的创建器 Fabien Potencier 带给你的。pimple根据MIT许可发放。
分享到:
相关推荐
Pimple是一个小巧而强大的PHP依赖项注入容器,由Silex微框架的作者Fabien Potencier创建。依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于提高代码的可测试性、可维护性和松耦合性。Pimple作为一...
5. **适配器模式**:Acclimate 通过适配器模式,能够兼容各种流行的PHP依赖注入库,如Pimple、League Container、Symfony DIC等,使得不同库之间的迁移变得简单。 6. **可扩展性**:Acclimate 的接口设计允许开发者...
在这个实例中,我们将聚焦于Ninject,一个流行的.NET框架,用于实现依赖注入。 Ninject是一个轻量级的依赖注入容器,它允许开发者在运行时将依赖关系传递给对象,而不是让对象自行创建或查找它们的依赖。这样做的...
Kohana 框架的 Pimple 依赖注入容器。 安装 要使用这个模块,只需要使用 Composer 这个模块: composer require rjd22/kohana-pimple:"~1.0" 然后将该模块添加到application/bootstrap.php的 kohana 模块列表中。...
Scute是一个用于Python 3.6+的小型依赖注入容器,从PHP的移植而来,该容器仅由一个文件和一个类(约100行代码)组成。 测试套件,甚至这个README文件,基本上都是Pimple的复制粘贴,仅对Python进行了少量修改,并...
5. **依赖注入容器**:为了实现代码解耦,命令行应用可能会使用依赖注入容器来管理类之间的依赖关系,如`Pimple`或`Laravel's Container`。 6. **事件驱动**:一些框架可能支持事件驱动模式,允许在特定时刻触发回...
**PimpleJs:JavaScript依赖注入库** PimpleJs是一个轻量级的JavaScript库,它实现了依赖注入(Dependency Injection,简称DI)模式。依赖注入是一种设计模式,它有助于提高代码的可测试性、可维护性和可扩展性。在...
Pimple 是 javascript 的依赖注入容器,兼容所有支持 javascript 的浏览器。 见: : 作者 M.Paraiso,受 Fabien Potencier 的 Pimple 启发: : 联系方式: 状态:测试版 特征: AMD 兼容 更改日志 0.0.4 疙瘩...
它是在 Pimple 之上设计的,Pimple 是一个非常简单的依赖注入容器 (DIC),用大约 80 行代码编写。 Pimple 是一个不错的 DIC,但随着项目的增长,它会变得非常冗长。 并且在本机上,Silex 无法使用另一个 DIC(Silex...
- 可以使用现有的PHP依赖注入容器(如Pimple或Symfony服务容器)。 2. **中间件(Middleware)** - 在控制器处理请求之前或之后执行某些逻辑。 - 例如权限验证、日志记录等功能。 3. **单元测试(Unit Testing)** ...
Pimple 是 PHP 语言中的一款著名微框架,它的核心功能是作为一个服务容器,帮助开发者管理和组织代码的依赖关系。通过预配置 Pimple 作为依赖注入容器,Silly CLI 可以更高效地处理命令行工具中的组件和服务,使得...
依赖注入容器的 Silex 服务提供者。 它不会取代 Silex 的默认 DI 容器 Pimple,而是添加了 PHP-DI 提供的额外功能。 安装 这个库在上。 要使用 Composer 包含它,请将以下内容添加到您的composer.json : "require...
Laminas框架是基于PHP构建的一个现代化、模块化和组件化的Web应用开发框架。它源自ZF2(Zend Framework 2),在2020年更名为Laminas,以更好地反映其社区驱动和开放源码的本质。这个框架的目标是提供高质量的组件,...
PHP-Spring是由Pimple库启发的一个轻量级容器,它允许开发者使用依赖注入(DI)来管理对象和类。DI是面向对象编程中的一个设计模式,它可以使代码更灵活、可测试和易于维护。在PHP-Spring中,你可以定义服务并注入到...
Slim框架非常适合轻量级站点,在V3版本中,它为依赖项注入容器采用了interop接口。 Slim V3默认使用Pimple DI。 Symfony DI尚不支持互操作接口定义。 这个小型库支持将DI容器的易于使用但功能强大的Symfony版本
物镜 ObjectivePim是一个小型的Objective-C依赖注入容器,基于的源代码(包括此文件:P)。 ## 安装获得ObjectivePim的受支持方法是使用 。 将ObjectivePim添加到您的Podfile: platform :ios, '6.1'pod '...
您是否已经例如通过框架初始化或在单元测试中定义了Pimple实例? $ di = new Pimple \ Container (); \ PimpleSingleton \ Container :: setContainer ( $ di ); $ di = \ PimpleSingleton \ Container :
我知道,已经有Pimple和许多其他出色的DI容器,为什么要使用它。 PDI不仅仅是DI容器。 这是一个完整的悬挂注射容器。 使用PDI,您可以将程序逻辑从它们的依赖关系中完全抽象出来。 是的,完全意味着您不必在数组或...
习惯了使用TP框架调用swoft的RPC微服务,使用hyperf框架时,在其文档和百度都没有找到其他框架调用RPC的数据结构,故只能在hyperf的RPC服务端的请求链路进行日志输入和搭建hyperf的PRC客户端进行数据请求
SlimBootstrap, 使用 Slim Pimple Twig 和NotORM的基本PHP应用程序的Bootstrap SlimBootstrap使用 Slim 。Pimple 。Twig 和NotORM的基本PHP应用程序的Bootstrap将 config/config.php.example 复制到 config/config....