blast / facades
最小化复杂性,将依赖关系表示为门面。
Requires
- php: >=5.5.0
- container-interop/container-interop: ^1.1
Requires (Dev)
- league/container: ~2.0
- phpunit/phpunit: 4.8.*
This package is not auto-updated.
Last update: 2024-09-14 18:36:44 UTC
README
Blast facades旨在最小化复杂性,并将依赖关系表示为通用门面。此包是Blast组件集合的一部分。
此包符合PSR-1、PSR-2和PSR-4。如果您发现合规性问题,请通过pull request发送补丁。
此包还支持container-interop (PSR-11)和所有使用container-interop的容器包。
安装
通过Composer
$ composer require blast/facades
用法
初始化
首先,我们需要告诉FacadeFactory应该使用哪个容器实例。例如,我们可以使用thephpleague/container
引导程序看起来像这样
<?php use Blast\Facades\FacadeFactory; use League\Container\Container; $container = new Container(); FacadeFactory::setContainer($container);
处理依赖关系
我们需要在我们的容器中注册一个服务,例如使用league/container。
现在有几种方法可以将此服务注册到容器中。
为了更好的透明度和设计,我们建议传递一个接口或合同FQCN作为服务ID。
<?php //add our service $container->add('Acme\Service', 'Acme\Service\SomeService'); //returns an instance of Acme\Service\SomeService $container->get('Acme\Service');
或
<?php //add our service $container->add('Acme\Service\SomeService'); //returns an instance of Acme\Service\SomeService $container->get('Acme\Service\SomeService');
或
<?php //returns an instance of Acme\Service\SomeService without registration $container->get('Acme\Service\SomeService');
有关更多信息,请参阅league/container 文档
创建和使用门面
门面应该是AbstractFacade的实例,并应提供访问器。
访问器是服务标识符。它将用于在容器中获取服务(通过Interop\Container\ContainerInterface::get($accessor)
)。
<?php namespace Acme\Facades\Service; use Blast\Facades\AbstractFacade; use Acme\Service; class Service extends AbstractFacade { protected static function accessor() { return Acme\Service::class; } }
我们现在可以从我们的门面或服务实例本身调用服务方法。
调用服务实例
<?php use Acme\Facades\Service; //is returning the service instance $service = Service::__instance();
调用服务方法
<?php use Acme\Facades\Service; Service::someMethod();
或
<?php use Acme\Facades\Service; //is returning the service instance $service = Service::__instance(); $service->someMethod();
或
<?php use Acme\Facades\Service; forward_static_call([Service::class, 'someMethod']);
或
<?php use Acme\Facades\Service; call_user_func(sprintf('%s::%s', Service::class, 'someMethod'));
您还可以传递参数。方法调用本身的行为与原始类的调用类似。
实例交换
有时服务将被另一个服务替换。只要服务ID没有改变,我们就不需要修改我们的门面中的任何内容。
<?php use Acme\Facades\Service; //add a service $container->add('Acme\Service', 'Acme\Service\SomeService'); //is returning the service instance Acme\Service\SomeService $service = Service::__instance(); //replace a service with another one $container->add('Acme\Service', 'Acme\Service\AnotherService'); //is now returning the service instance Acme\Service\AnotherService $service = Service::__instance();
支持的项目
使用ContainerInterface
的项目
变更日志
有关最近更改的更多信息,请参阅变更日志
测试
$ composer test
贡献
有关详细信息,请参阅贡献
安全
如果您发现任何安全问题,请通过电子邮件:author_email而不是使用问题跟踪器。
鸣谢
特别感谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件