drewlabs / libman
Libman 包是一个小巧的 PHP 工具库,用于通过基于配置的方法安装和创建业务特定的类实例。
Requires
- php: >=7.0
- composer-runtime-api: ^2.0
- symfony/process: ^3.4|^4.0|^5.0|^6.1
Requires (Dev)
- phpunit/phpunit: >=6.0
Suggests
- ext-yaml: YAML extension is required to use the YAML definiton loader
README
Libman 包是一个小巧的 PHP 工具库,用于通过基于配置的方法安装和创建业务特定的类实例。该包提供了 YAML 和 JSON 库定义提供者,由运行时实例构建器使用。
概念
- 什么是库?
在 libman
包实现中,库是一个围绕执行特定任务或一系列任务的 PHP 对象的纯抽象。具有业务领域特定实现的 PHP 对象,该对象必须由另一个 PHP 应用程序所需要。
- 为什么选择
Libman
Libman 试图提供一个 API,在运行时构建库(类)的实例,而不需要开发者通过编程方式创建实例。开发者提供有关在将库添加到项目时使用哪种包管理器的配置值,以及用于创建库实例的工厂类。
使用开发者配置,以 YAML/JSON 编写,或任何库定义提供者,当在应用程序代码中需要时,Libman
将能够创建库实例。
安装
使用 composer 管理器将库添加到您的 PHP 应用程序
composer require drewlabs/libman
用法
- 创建基于 composer 的库
基于 composer 的库是可使用 PHP
composer 包管理器安装的 PHP 库。库管理器默认假设库工厂类的名称为 Factory
。
use Drewlabs\Libman\LibraryConfig; use Drewlabs\Libman\LibraryInstallerFactory; // Creates an instance of the library to install // API: LibraryConfig::new(string name, string type, string package) $library = LibraryConfig::new('ClientLibrary', 'composer', 'client/library');
- 使用 PHP 工厂类创建库配置
基于工厂类的库配置是使用 PHP 工厂类创建库实例的库配置。
use Drewlabs\Libman\LibraryConfig; use Drewlabs\Libman\LibraryInstallerFactory; // Creates an instance of the library to install // API : LibraryConfig::new(string name, ?string type, ?string package, string $factoryClass) $library = LibraryConfig::new('ClientLibrary', null, null, ClientLibraryFactory::class);
- 使用
LibraryManager
创建库实例
LibraryManager
是 libman
提供的 PHP 类,用于根据配置文件或数据库配置创建库实例。
下面的代码使用 InMemoryConfigurationRepository
类,它将从 yaml 定义文件中读取库配置。
use Drewlabs\Libman\LibraryManager; use Drewlabs\Libma\InMemoryConfigurationRepository; use Drewlabs\Libman\YAMLDefinitionsProvider; $repository = new InMemoryConfigurationRepository(YAMLDefinitionsProvider::create('./path/to/libman.yml')); $libManager = new LibraryManager($repository); // Create an instance a composer based library named 'drewlabs/crypt' $libManager->resolveInstance('drewlabs/crypt');
LibraryManager
类提供了静态方法 createInstance
,它接受一个库配置实例。
use Drewlabs\Libman\LibraryManager; use Drewlabs\Libman\LibraryConfig; // Create an Instance of the library $instance = LibraryManager::createInstance(LibraryConfig::new('ClientLibrary));
API 参考
库的 API 参考可以在 [] 中找到。