blast/facades

最小化复杂性,将依赖关系表示为门面。

1.0 2015-10-22 17:05 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:36:44 UTC


README

Latest Version on Packagist Software License Build Status Total Downloads Coverage Status

Blast facades旨在最小化复杂性,并将依赖关系表示为通用门面。此包是Blast组件集合的一部分。

此包符合PSR-1PSR-2PSR-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)。有关更多信息,请参阅许可证文件