webiny/std-lib

Webiny StdLib 组件

v1.6.1 2017-09-29 08:12 UTC

README

标准库是一组核心 Webiny 框架组件,使在处理字符串、数组、日期时间和 URL 等底层对象时,编码变得更加愉悦。

安装组件

安装组件的最佳方式是使用 Composer。

composer require webiny/std-lib

要获取软件包的附加版本,请访问 Packagist 页面

关于

标准库包括以下库

  • 异常
  • [StdObject] (StdObject)

..以及以下辅助特性

  • ComponentTrait
  • FactoryLoaderTrait
  • SingletonTrait
  • ValidatorTrait
  • StdLibTrait
  • StdObjectTrait

ComponentTrait

该特性用于创建新的 Webiny 框架组件。通过实现此特性,您可以自动获取注册所需类加载器库、服务和为新组件添加的额外参数的能力。该特性基于两个主要方法 setConfiggetConfig,这两个方法都定义为 public static

以下是一个使用 ComponentTrait 的 Webiny 框架组件示例。

$crypy = \Webiny\Component\Crypt::setConfig('ExampleConfig.yaml');

ExampleConfig.yaml 文件定义如下

Crypt:
    Services:
        Password:
            Class: \Webiny\Component\Crypt\Crypt
            Arguments: [Blowfish, CCM, rijndael-128, _FOO_VECTOR]
        Cookie:
            Class: \Webiny\Component\Crypt\Crypt
            Arguments: [Blowfish, CCM, rijndael-128, _FOO_VECTOR]
    Bridge: \Webiny\Component\Crypt\Bridge\CryptLib\CryptLib
    ClassLoader:
        CryptLib: /var/www/Vendors/PHP-CryptLib/lib/CryptLib

以下是一些您应该注意的事项

  • yaml 文件的根与类名(Crypt)相匹配,类名与根组件命名空间相匹配 \Webiny\Component\Crypt
  • Services 定义基于 [ServiceManager](../ServiceManager) 组件定义的规则,yaml 文件中定义的所有服务都将自动注册到 ServiceManager 中,名称为 ComponentName.ServiceName,例如本例中的 Crypt.PasswordCrypt.Cookie
  • Bridge 是一个可选参数。您可以定义任意数量的可选参数
  • ClassLoader 参数是一个数组,包含命名空间作为键和路径作为值。所有 ClassLoader 参数下的定义都将自动分配给 Webiny 框架 ClassLoader 组件

因此,从您看到的情况来看,ComponentTrait 做了很多方便的事情,使 Webiny 框架组件组织得非常整洁。

回调

如果您想了解您的类中的配置文件何时已被解析,以及所有服务和类加载器路径已分配,您只需在您的组件类中定义一个 protected static function _postSetConfig,然后 ComponentTrait 将在您为该类定义配置时自动调用它。

FactoryLoaderTrait

当您想加载一些类,其中类名定义为字符串或变量内,并且您想将一些参数传递给构造函数时,这是一个很有用的特性。您还可以传递一个接口或必须实现/扩展的类名。该特性将首先使用给定的参数构建对象,然后将其实例与给定的接口或类进行验证。如果一切匹配,则返回类实例,否则抛出异常。

class MyClass
{
    use FactoryTrait;

    function myMethod()
    {
        // let's say we have a class we want to construct
        // the class has a constructor defined like this __construct($param1, $param2)
        // the class should implement \Webiny\Crypt\Bridge\CryptInterface
        $class = '\SomeVendor\SomeLib\SomeClass';

        try {
            $classInstance = $this->factory($class, '\Webiny\Crypt\Bridge\CryptInterface', ['foo1', 'foo2']);
        } catch (\Webiny\StdLib\Exception\Exception $e) {
            throw $e; // the class probably doesn't implement the required interface
        }
    }
}

SingletonTrait

SingletonTrait 用于实现 单例模式 的类。您只需在您希望是单例的类上使用该特性即可。

在您的类中,您可以可选地实现两种方法,即 public function init()protected function _init(),它们只在请求单例实例时被调用一次。

class MyClass
{
    use SingletonTrait;

    protected function __init()
    {
        // this will be called only once
        $this->__somePrivateMethod();
    }
}

要使用您的类,只需调用由特质实现的静态 getInstance 方法。

$instance = MyClass::getInstance(); // this calls the internal __init method, but only the first time, when it creates the instance

StdLibTrait

此外,还有一个带有一些常用函数的辅助特质。特质本身只支持有限的方法,但我们计划进一步扩展它,所以请随时提出建议。

这个特质不仅定义了辅助方法,而且还 uses ValidatorTraitStdObjectTrait 特质。

StdObjectTrait

这个特质在处理 StdObject 库时提供辅助函数。

class MyClass
{
    use StdObjectTrait;

    public function test()
    {
        // create StringObject
        $this->str('This is a string');

        // create ArrayObject
        $this->arr(['one', 'two']);

        // create UrlObject
        $this->url('http://www.webiny.com/');

        // create DateTimeObject
        $this->dateTime('now');
    }
}

ValidatorTrait

这是一个包含一些常见验证方法(如 isNullisEmptyisInstanceOf 等)的辅助特质。查看类,所有方法都有文档说明,并且大多数都是自我解释的。

资源

要运行单元测试,您需要使用以下命令

$ cd path/to/Webiny/Component/StdLib/
$ composer.phar install
$ phpunit