webiny / std-lib
Webiny StdLib 组件
Requires
- php: ^7
Requires (Dev)
- mybuilder/phpunit-accelerator: dev-master
- phpunit/phpunit: ~6
README
标准库是一组核心 Webiny 框架组件,使在处理字符串、数组、日期时间和 URL 等底层对象时,编码变得更加愉悦。
安装组件
安装组件的最佳方式是使用 Composer。
composer require webiny/std-lib
要获取软件包的附加版本,请访问 Packagist 页面。
关于
标准库包括以下库
- 异常
- [StdObject] (StdObject)
..以及以下辅助特性
- ComponentTrait
- FactoryLoaderTrait
- SingletonTrait
- ValidatorTrait
- StdLibTrait
- StdObjectTrait
ComponentTrait
该特性用于创建新的 Webiny 框架组件。通过实现此特性,您可以自动获取注册所需类加载器库、服务和为新组件添加的额外参数的能力。该特性基于两个主要方法 setConfig
和 getConfig
,这两个方法都定义为 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.Password
和Crypt.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
ValidatorTrait
和 StdObjectTrait
特质。
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
这是一个包含一些常见验证方法(如 isNull
、isEmpty
、isInstanceOf
等)的辅助特质。查看类,所有方法都有文档说明,并且大多数都是自我解释的。
资源
要运行单元测试,您需要使用以下命令
$ cd path/to/Webiny/Component/StdLib/
$ composer.phar install
$ phpunit